私はQtを使ってGUIアプリケーションを開発する学生プログラマーです。私はベクトルに格納されているいくつかのプロパティを表示するためにQTreeWidgetを使用しています。同じウィンドウに、編集、コピー、および削除ボタンがあります。今のところボタンは必要なことをするために働いています。しかし、私は何も選択されていないときに問題を抱えています。私のプログラムは予期せず終了する。私はseg faultを推測しています。私は正しく選択された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を使用してみましたが、私はその持つ問題はそのQwidgetTreeItemのでitemToEditの値を取得すると思います。私は挑戦を学んで克服することに興味があるので、生産的なフィードバックを残してください。前もって感謝します!
解決策はありますが、*選択した*項目に関連する機能の存在に注意してください。それらは、現在のアイテムが必ずしも選択に対応しないことを意味する。特に、選択された複数のアイテムが選択モデルによって異なる場合がありますが、現在のものは1つだけと考えられます。 –