获取QComboBox的内容

时间:2014-09-18 12:21:24

标签: c++ arrays qt qstring qcombobox

我需要QStringListQString中包含所有QComboBox的数组。

我无法找到执行此操作的QComboBox方法,实际上我甚至找不到执行此操作的QAbstractItemModel方法。

这是真的我唯一的选择:

std::vector< QString > list( myQComboBox.count() );

for( auto i = 0; i < list.size(); i++ )
{
    list[i] = myQComboBox.itemText( i );
}

3 个答案:

答案 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,并提供对它的访问。