gpt4 book ai didi

c++ - 带有自定义小部件的 QItemDelegate

转载 作者:太空宇宙 更新时间:2023-11-04 11:35:57 25 4
gpt4 key购买 nike

我的 QTableViewQItemDelegate 类有问题。对于一列,我的代表创建了一个简单的组合框,一切正常。对于我的第二列,我需要一个在单个小部件中具有两个组合框的小部件。

我在我的 QItemDelegate 中编写了以下代码,为了清楚起见,这只显示了我的第 2 列的代码,该列不起作用。另一个简单的组合框没有显示,因为它工作正常:

QWidget *UserDefinedUnitsDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem & option ,const QModelIndex & index ) const
{
//set up a simple widget with a layout
QWidget* pWidget = new QWidget(parent);
QHBoxLayout* hLayout = new QHBoxLayout(pWidget);
pWidget->setLayout(hLayout);

//add two combo boxes to the layout
QComboBox* comboEditor = new QComboBox(pWidget);
QComboBox* comboEditor2 = new QComboBox(pWidget);

//now add both editors to this
hLayout->addWidget(comboEditor);
hLayout->addWidget(comboEditor2);
return pWidget;
}

现在它显示得很好,但是当我编辑它并单击别处时它不会停止编辑。谁能指点一下?

编辑:所以我需要在某个时候调用 CommitData() 和 closeEditor()。任何人都可以提供关于在哪里调用这些的指示吗?

谢谢。

最佳答案

您可以将编辑器小部件保留为类的成员,并在其中一个组合框的当前索引发生更改时发出 commitData。因此,您可以将 currentIndexChanged(int) 连接到插槽并从那里发出 commitData:

QWidget *UserDefinedUnitsDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem & option ,const QModelIndex & index ) const
{
//set up a simple widget with a layout
pWidget = new QWidget(parent);
QHBoxLayout* hLayout = new QHBoxLayout(pWidget);
pWidget->setLayout(hLayout);

//add two combo boxes to the layout
QComboBox* comboEditor = new QComboBox(pWidget);
QComboBox* comboEditor2 = new QComboBox(pWidget);

connect(comboEditor,SIGNAL(currentIndexChanged(int)),this,SLOT(setData(int)));
connect(comboEditor2,SIGNAL(currentIndexChanged(int)),this,SLOT(setData(int)));

//now add both editors to this
hLayout->addWidget(comboEditor);
hLayout->addWidget(comboEditor2);
return pWidget;
}

void UserDefinedUnitsDelegate::setData(int val)
{
emit commitData(pWidget);
}

关于c++ - 带有自定义小部件的 QItemDelegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23058214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com