添付図のような QTreeView (QTreeWidget ではない) 構造を作成したい. これが QT のプロパティ エディタです。QT-4.6を使用しています
2 列目では、さまざまな条件に応じて、スピン ボックス、ドロップ ダウン、チェックボックス、テキスト編集などを使用できます。特定の列。ドキュメントから、セルにデリゲートを設定するための直接的な API がないことは明らかです (むしろ、完全なウィジェットまたは行または列で使用できます)。
添付図のような QTreeView (QTreeWidget ではない) 構造を作成したい. これが QT のプロパティ エディタです。QT-4.6を使用しています
2 列目では、さまざまな条件に応じて、スピン ボックス、ドロップ ダウン、チェックボックス、テキスト編集などを使用できます。特定の列。ドキュメントから、セルにデリゲートを設定するための直接的な API がないことは明らかです (むしろ、完全なウィジェットまたは行または列で使用できます)。
やなどのすべてのQAbstractItemDelegate
メソッドには、パラメータの 1 つとしてモデル インデックスがあります。そのインデックスを使用してモデル データにアクセスし、適切なデリゲート ウィジェットを作成できます。モデルを作成するときは、そのタイプを区別するために使用されるすべてのアイテムに何らかの値を設定する必要があります。createEditor
paint
例:
enum DelegateType
{
DT_Text,
DT_Checkbox,
DT_Combo
}
const int MyTypeRole = Qt::UserRole + 1;
QStandardItemModel* createModel()
{
QStandardItemModel *model = new QStandardItemModel;
QStandardItem *item = new QStandardItem;
item->setText("Hello!");
item->setData(DT_Checkbox, MyTypeRole);
model->appendRow(item);
return model;
}
QWidget* MyDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
int type = index.data(MyTypeRole).toInt();
// this is a simplified example
switch (type)
{
case DT_Text:
return new QLinedEdit;
case DT_Checkbox:
return new QCheckBox;
case DT_Combo:
return new QComboBox;
default:
return QItemDelegate::createEditor(parent, option, index);
}
}
@hankこれはあなたの最後のコメントへの返信です...それに欠陥はありますか?
MyItem* item2 = new MyItem(second);
item2->setData(delType, **MyTypeRole**);
if(delType == DT_Combo)
{
QString str1, str2, str3;
QStringList abc ;
abc << ("1" + str1.setNum(counter) ) << ("2" + str2.setNum(counter) )<< ( "3" + str3.setNum(counter) );
item2->setData(abc, MyTypeRole1);
}
QWidget* MyDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
int type = index.data(MyTypeRole).toInt();
// this is a simplified example
switch (type)
{
case DT_Text:
return new QLinedEdit;
case DT_Combo:
{
QComboBox* cb = new QComboBox(parent);
QStringList entries - index.data(MyTypeRole1).toStringList();
cb->addItems(entries)
return cb;
}
別の item2 で、ここに来るたびに異なるカウンター変数でエントリを動的に作成します... ここでは、別のコンボ ボックスに別のエントリが表示されます。
アプローチはあなたにとってうまく見えますか?