QTreeWidgetItem中的QComboBox

Pio*_*zia 8 qt qt4 pyqt pyqt4

是否有类似于(PyQT)的东西, QTreeWidgetItem.setCheckState(0, Qt.Checked)但对于组合框?

我在参考文献中看不到任何内容,那么如何在QTreeWidgetItem中插入自定义QComboBox作为其中一个元素?

Aar*_*lla 23

使用QTreeWidget :: setItemWidget(QTreeWidgetItem*item,int column,QWidget*widget)将组合框放入单元格中.

例如,让我们将2列QTreeWidget的第二列的所有行都设为组合框:

QTreeWidgetItemIterator it(ui->treeWidget);
while (*it) {
    QComboBox *comboBox = new QComboBox(this);
    comboBox->addItems(QStringList() << "item1" << "item2");
    ui->treeWidget->setItemWidget(*it, 1, comboBox);
    ++it;
}
Run Code Online (Sandbox Code Playgroud)

我们的示例小部件现在如下所示:

在此输入图像描述


小智 13

我知道这是一个老问题,但我想我有一个更彻底的答案.要从QComboBox中获取任何功能,您可能需要对其进行子类化.这是我提出的解决方案:


#ifndef COMBOBOXITEM_H
#define COMBOBOXITEM_H

#include 

class ComboBoxItem : public QComboBox
{
    Q_OBJECT

private:
    QTreeWidgetItem *item;
    int column;

public:
    ComboBoxItem(QTreeWidgetItem*, int);

public slots:
    void changeItem(int);

};

ComboBoxItem::ComboBoxItem(QTreeWidgetItem *item, int column)
{
    this->item = item;
    this->column = column;
    connect(this, SIGNAL(currentIndexChanged(int)), SLOT(changeItem(int)));
}

void ComboBoxItem::changeItem(int index)
{
    if(index >=0)
    {
        item->setData(this->column, Qt::UserRole, this->itemText(index));
        qDebug() item->data(this->column, Qt::UserRole).toString();
    }
}

#include "moc_ComboBoxItem.cpp"

#endif // COMBOBOXITEM_H

////// Sample implementation..

lst = new QTreeWidget;
// Snip
QTreeWidgetItem *itm = new QTreeWidgetItem;
// Snip
ComboBoxItem *cmb = new ComboBoxItem(itm, 1);
cmb->addItem("One");
cmb->addItem("Two");
cmb->addItem("Three");
cmb->addItem("Four");
lst->setItemWidget(itm, 1, cmb);

Run Code Online (Sandbox Code Playgroud)

我希望能帮助需要QTreeWidgetItem内部的QComboBox的人!