1

我的课程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() 。任何人都可以提供有关在哪里调用这些的指示吗?

谢谢。

4

1 回答 1

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);
}
于 2014-04-14T16:30:31.667 回答