我希望能够在不使用itemText遍历内容的情况下访问QComboBox中的值。
for( auto i = 0u; i < myQComboBox->count(); i++ )
{
result[i] = myQComboBox->itemText( i );
}有没有办法访问QComboBox的底层QList,这样我就可以只使用operator[],或者更好的迭代器和基于范围的循环?
发布于 2014-06-05 01:21:00
看起来您在语法上被搁置了:您想用myQComboBox[i]替换myQComboBox->itemText(i)。这很容易做到:
// implementation
class ModelAdapter {
QPointer<QAbstractItemModel> m_model;
public:
explicit ModelAdapter(QComboBox & box) : m_model(box.model()) {}
explicit ModelAdapter(QAbstractItemModel * model) : m_model(model) {}
QVariant operator[](int i) { return m_model->index(i, 0); }
};
// point of use
ModelAdapter model(myQComboBox);
for( auto i = 0; i < myQComboBox->count(); i++ )
{
result[i] = model[i];
}有了一个好的编译器,您可以执行以下操作,并让它生成与直接使用combobox.model->index(i, 0)相同的代码。我不明白它的意义,但是嘿,这是可能的:)
// implementation
class Adapter {
QAbstractItemModel* m_model;
public:
explicit Adapter(QComboBox & box) : m_model(box.model()) {}
explicit Adapter(QAbstractItemModel * model) : m_model(model) {}
QVariant operator[](int i) { return m_model->index(i, 0); }
};
// point of use
for( auto i = 0; i < myQComboBox->count(); i++ )
{
result[i] = Adapter(myQComboBox)[i];
}一个类似的适配器可以为您提供迭代器。
发布于 2014-06-04 20:26:07
您可以使用组合框的模型来检索项数据。下面是一个例子,我将如何做到这一点:
QComboBox combo;
combo.addItem("Item 1");
QAbstractItemModel *model = combo.model();
QModelIndex idx = model->index(0, 0); // Refers to the first item
QString item = model->data(idx).toString(); // Returns 'Item 1'要访问组合框的第二个或更多项,只需更改index()函数调用中的行号:
QModelIndex idx = model->index(0, 0);
the row number ^到目前为止,我还不知道有任何基于迭代器的组合框应用编程接口,但你可以使用QAbstractItemModel的所有功能。
https://stackoverflow.com/questions/24037259
复制相似问题