在运行时,我在 QTreeWidget 中插入了 QCombobox,如下所示:
//global defines
#define COLUMN_1 (0)
#define COLUMN_2 (1)
//Init QComboBox to QTreeWidget - works fine.
QTreeWidgetItem *item = new QTreeWidgetItem(_myTreeWidget);
item->setText(COLUMN_1,"testing");
QComboBox *box = new QComboBox();
box->addItem("select1");
box->addItem("select2");
box->addItem("select3");
_myTreeWidget->setItemWidget(item, 1, box);
Run Code Online (Sandbox Code Playgroud)
上面的代码有效,但我也想读取这些列中的数据文本。例如。从上面的代码中获取字符串“testing”和“select2”。问题是我不知道如何读取组合框中的“QComboBox::currentText()”。我试过了:
QTreeWidgetItemIterator it(_myTreeWidget);
while(*it)
{
QTreeWidgetItem *item = *it;
QVariant first = item->text(COLUMN_1);
QString firstStr = loggerName.toString(); //this works
QComboBox *box = (QComboBox*)item->data(COLUMN_2, 0);
QString boxValStr = box->text().toString(); //this doesn't works, always empty string
//... more code to handle strings...
it++;
}
Run Code Online (Sandbox Code Playgroud)
感觉“item->data(COLUMN_2, 0)”是错误的方法,因为它返回一个QVariant。这个问题的解决方案?
QComboBox *box = (QComboBox*)item->data(COLUMN_2, 0);
当我阅读这段代码时,我进入了恐慌模式。看签名:
QVariant QTreeWidgetItem::data ( int column, int role ) const
Run Code Online (Sandbox Code Playgroud)
正如您所使用的setItemWidget
,您可能应该使用
QWidget * QTreeWidget::itemWidget ( QTreeWidgetItem * item, int column ) const
Run Code Online (Sandbox Code Playgroud)
ps:如果要强制转换,请使用 C++ 强制转换。好多了,qobject_cast<SubtypeofQObjectPtr>
用于QObject
. 当强制转换无效时,它返回 null。
实际上,我的意思是使用类似于以下内容的调用检索组合框:
QComboBox* box = qobject_cast<QComboBox*>(treeWidget->itemWidget(item, column));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4248 次 |
最近记录: |