我是一名使用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 *項目相關的函數的存在。他們暗示目前的項目並不總是對應於選擇。特別是,可能(取決於您的選擇模型)選擇多個項目,但我相信只有一個當前。 –