QTreeWidget にデリゲートを設定しようとしています。問題は、デリゲート setModelData が呼び出されないことです。createEditor と setEditorData が呼び出されます。
私が作成するエディタは単純な QLineEdit であるため、commitData() シグナルを発行する必要はありません。また、必要に応じてこのシグナルを発行しようとしましたが、 editLine editFinished() が発行されたときに発生しましたが、問題は解決しません。ドキュメントを理解しているように、 QLineEdit setModelData のような単純なウィジェットの場合、commitData 信号を発行せずに呼び出す必要があるため、次のコードが機能するはずです。
MyDlg::MyDlg()
{
mTreeWdg->setItemDelegate(new TestDelegate( this ));
}
MyDlg::OnTreeItemDoubleCliked(QTreeeWidget* item,int column)
{
if(column != 1) return;
item->setFlags(Qt::ItemIsEditable);
mTreeWdg->editItem(item,column);
}
TestDelegate::TestDelegate(QObject *parent )
:QItemDelegate(parent)
{
}
QWidget* TestDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if(index.column() == 1) // value column
{
QLineEdit* edit = new QLineEdit(parent);
return edit;
}
else return 0; // no editor attached
}
void TestDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
if(index.column() == 1)
{
QLineEdit* edit = static_cast<QLineEdit*> (editor);
edit->setText("damn");
}
}
void TestDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index)
{
if(index.column()!= 1)
return;
}
void TestDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option, const QModelIndex &index) const
{
editor->setGeometry(option.rect);
}