문제

(pyqt)와 비슷한 것이 있습니까?QTreeWidgetItem.setCheckState(0, Qt.Checked) 하지만 콤보 박스를 위해?

참조에서 아무것도 볼 수 없으므로 QtreeWidgetItem의 요소 중 하나로 사용자 정의 qcombobox를 어떻게 삽입 할 수 있습니까?

도움이 되었습니까?

해결책

사용 qtreewidget :: setitemwidget (qtreewidgetitem * 항목, int 열, qwidget * 위젯) 콤보 상자를 세포에 넣습니다.

예를 들어, 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;
}

예제 위젯은 이제 다음과 같습니다.

enter image description here

다른 팁

나는 이것이 오래된 질문이라는 것을 알고 있지만 더 철저한 대답이 있다고 생각합니다. 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);

QtreeWidgetItem 내부에 qcombobox가 필요한 사람이 필요한 사람에게 도움이되기를 바랍니다.

이것은 가장 쉬운 방법입니다.

QComboBox *cb = new QComboBox(this);
QStringList cbTexts;
cbTexts << tr("First") << tr("Second") << tr("Third");
cb->addItems(cbTexts);

QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeWidget);
ui->treeWidget->addTopLevelItem(item);
ui->treeWidget->setItemWidget(item, [colum here], cb);
for (int col = 0; col < [num colums]; ++col) ui->treeWidget->resizeColumnToContents(col);

다음은 다른 포스터 방법에 대한 작은 수정입니다. 나는 그것이 데이터를 사용하여 방법에 대한 settext updater로 작은 변경을 수행 한 방법을 업데이트하기 위해 데이터를 사용한다는 것을 알았습니다.

#ifndef COMBOBOXITEM_H
#define COMBOBOXITEM_H

#include <QtGui>

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)
    {
        this->item->setText(this->column, this->currentText());

    }
}

#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);

사용

setitemwidget (qtreewidgetitem (), column, qwidget ())

Qwidget ()를 상속하므로 qcombobox ()를 매개 변수로 추가하여 호환됩니다.

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top