(PyQT) QTreeWidgetItem.setCheckState(0, Qt.Checked)
に似ていますが、コンボボックスはありますか?QTreeWidgetItem内のQComboBox
QTreeWidgetItem内の要素の1つとしてカスタムQComboBoxを挿入するにはどうすればいいですか?
(PyQT) QTreeWidgetItem.setCheckState(0, Qt.Checked)
に似ていますが、コンボボックスはありますか?QTreeWidgetItem内のQComboBox
QTreeWidgetItem内の要素の1つとしてカスタムQComboBoxを挿入するにはどうすればいいですか?
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;
}
私たちの例のウィジェットは、次のようになります。
これは古い質問ですが、私はもっと徹底的な答えがあると思います。 QComboBoxから機能を取得するには、おそらくそれをサブクラス化する必要があります。私はそれがQTreeWidgetItemの内部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);
:ここで私が思いついた解決策です!ここで
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アップデータに小さな変更を加えました。そう
#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()、コラム、QWidgetの())
.Justは(あなたのQComboBoxを追加)をパラメータとして、それはQWidgetのを(継承など)それは互換性があります。
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)
ありがとう、これは多くの感情的な答えの方法です、私は誰が最良の答えを選んだのだろうか! – Orochi
質問は2009年に返されました。私は2011年にそれに答えましたので、それは確かです。 –
:)しかし、とにかく感謝します。私はビューの代理人を使用することを考えていたので、実際に役立ちましたが、このソリューションはずっと簡単です – Orochi