我需要QStringList
或QString
中包含所有QComboBox
的数组。
我无法找到执行此操作的QComboBox
方法,实际上我甚至找不到执行此操作的QAbstractItemModel
方法。
这是真的我唯一的选择:
std::vector< QString > list( myQComboBox.count() );
for( auto i = 0; i < list.size(); i++ )
{
list[i] = myQComboBox.itemText( i );
}
答案 0 :(得分:5)
QAbstractItemModel
可以包含图像,树可以保存在QVariant
中的其他类型的数据。这就是为什么你不能从中获得QStringList
的原因。这毫无意义。
但是,有一个继承自QStringListModel
的类QAbstractItemModel
用于保留字符串。正如您所料,它有方法stringList()
。
QComboBox
允许您将其使用的默认模型更改为另一个模型。默认情况下,它使用QStandardItemModel
。创建组合框后将其更改为字符串列表模型。
QStringListModel* cbModel = new QStringListModel();
comboBox->setModel(cbModel);
现在你可以得到你想要的东西:
QStringList list = cbModel->stringList();
答案 1 :(得分:5)
您的答案看起来不错,但您也可以使用QStringList而不是矢量。
<th ng-repeat="(key,value) in products[0]">{{key}}</th>
答案 2 :(得分:2)
不要过早优化。你的代码还可以。您可以使用qobject_cast<QStandardItemModel*>(combo.model());
来获得对组合框数据的扩展访问权。
此外,您可以实现自己的QAbstractItemModel,它将数据存储为QStringList,并提供对它的访问。