首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTreeWidgetItem内部的QComboBox

QTreeWidgetItem内部的QComboBox
EN

Stack Overflow用户
提问于 2009-11-03 22:32:16
回答 5查看 18.5K关注 0票数 9

除了组合框,有没有类似于(PyQT) QTreeWidgetItem.setCheckState(0, Qt.Checked)的东西?

我在引用中看不到任何东西,那么如何在QTreeWidgetItem中插入一个自定义QComboBox作为元素之一呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-03 22:43:03

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

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

代码语言:javascript
复制
QTreeWidgetItemIterator it(ui->treeWidget);
while (*it) {
    QComboBox *comboBox = new QComboBox(this);
    comboBox->addItems(QStringList() << "item1" << "item2");
    ui->treeWidget->setItemWidget(*it, 1, comboBox);
    ++it;
}

我们的示例小部件现在看起来像这样:

票数 26
EN

Stack Overflow用户

发布于 2011-01-31 16:52:15

我知道这是一个老生常谈的问题,但我想我有一个更彻底的答案。要从QComboBox中获得任何功能,您可能需要将其子类化。这是我想出的解决方案:

代码语言:javascript
复制
#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);

我希望这对需要QTreeWidgetItem中的QComboBox的人有所帮助!

票数 15
EN

Stack Overflow用户

发布于 2015-09-23 21:30:56

使用

列setItemWidget(QTreeWidgetItem( ),

,QWidget( ))

.Just添加QComboBox()作为参数,因为它继承了QWidget(),所以它是兼容的。

代码语言:javascript
复制
tree = QTreeWidget()

cmb = QComboBox()
cmb.addItem("Item1", 'value1')
cmb.addItem("Item2", 'value2')
cmb.addItem("Item3", 'value3')

item = QTreeWidgetItem(tree.invisibleRootItem())
column = 0
item.setData(column, Qt.EditRole, 'NameYouWant')
column += 1
tree.setItemWidget(item, column , cmb)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1667688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档