QItemDelegate使用自定义小部件

时间:2014-04-14 10:51:44

标签: c++ qt qtableview qitemdelegate

我的QTableViewQItemDelegate课程出现问题。对于一列我的委托创建一个简单的组合框,一切正常。对于我的第二列,我需要一个在一个小部件中有两个组合框的小部件。

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

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()。任何人都可以提供关于在何处调用这些内容的指示?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以将编辑器窗口小部件保留为类的成员,并在其中一个组合框的当前索引发生更改时发出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);
}