我是一名使用Qt开发GUI应用程序的学生程序员。我正在使用QTreeWidget来显示存储在向量中的一些属性。在同一个窗口中,我有按钮编辑,复制和删除。到目前为止,这些按钮可以满足他们的需求。但是我没有选择任何东西时遇到问题。我的程序意外地完成;我在猜测一个seg故障。我不认为我正在处理正确选择的currentItem。然而Qt's Documentation在这个没有说什么被返回,如果没有被选中。所以我希望有更多经验的人来帮助/启发我。如果有什么你想看到的代码只包括问的一面。这里是我的(相关)代码:QTreeWidget :: currentItem什么时候没有选择什么时候返回?
#include "injectiongui.h"
#include "ui_injectiongui.h"
#include "injectiondialog.h"
#include "ui_injectiondialog.h"
#include "injectiondata.h"
#include <QMessageBox>
InjectionGUI::InjectionGUI(QWidget *parent) :
QWidget(parent),
ui(new Ui::InjectionGUI)
{
ui->setupUi(this);
ui->groupBoxGlobalParticlesPerCell->hide();
connect(ui->pushButtonEdit, SIGNAL(clicked()), this, SLOT(slotInjectionEdit()));
}
void InjectionGUI::buildTreeWidget()
{
//Build or Refresh Tree Widget with info from the vector
}
void InjectionGUI::editInjection_Clicked(QTreeWidgetItem *itemToEdit) //Creates an Injection Dialog to edit an Item from the Vector
{
QString converter = itemToEdit->text(0);
int id = converter.toInt();
InjectionDialog editInjectionDialog;
InjectionData presetValues;
if(itemToEdit == 0) // this was my attempt to handle nothing selected
{
QMessageBox invalidSelection;
invalidSelection.setText("Error: No row selected to edit");
return;
}
presetValues = qTreeInjectionData.at(id);
editInjectionDialog.setData(presetValues);
presetValues = editInjectionDialog.getData();
editInjectionDialog.exec();
qTreeInjectionData.replace(id, editInjectionDialog.transInjectionData);
buildTreeWidget();
}
void InjectionGUI::slotInjectionEdit()
{
editInjection_Clicked(ui->treeWidgetInjections->currentItem());
}
我试着用qDebug找出正在返回什么,但我认为它有问题获取itemToEdit,因为它的一个QwidgetTreeItem的价值。请仅留下有用的反馈,因为我只对学习和克服挑战感兴趣。提前致谢!
看来你有你的解决方案,但要注意与* selected *项目相关的函数的存在。他们暗示目前的项目并不总是对应于选择。特别是,可能(取决于您的选择模型)选择多个项目,但我相信只有一个当前。 –