9

(PyQT)に似たものがあります QTreeWidgetItem.setCheckState(0, Qt.Checked)が、コンボボックス用ですか?

参照に何も表示されないので、カスタム QComboBox を QTreeWidgetItem 内の要素の 1 つとして挿入するにはどうすればよいですか?

4

5 に答える 5

26

QTreeWidget ::setItemWidget ( QTreeWidgetItem * item, int column, QWidget * widget )を使用して、コンボ ボックスをセルに配置します。

たとえば、2 列の QTreeWidget の 2 列目のすべての行をすべてコンボ ボックスにします。

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

サンプル ウィジェットは次のようになります。

ここに画像の説明を入力

于 2009-11-03T14:43:03.183 に答える
15

これは古い質問であることは知っていますが、より完全な答えがあると思います。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 が必要な人に役立つことを願っています!

于 2011-01-31T08:52:15.073 に答える
0

これは、別のポスターの方法に対する小さな修正です。データを使用してボックスを更新することがわかりましたが、メソッドのsetTextアップデーターに小さな変更を加えました。

#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);
于 2014-05-13T09:24:26.757 に答える