2015-09-19 175 views
1

加速QComboBox使用非常大的数据集想要尝试使用QSqlQueryModel而不是QStandardItemModel。但是,QComboBox中的文本数据需要映射到一个ID,该ID通过itemData(rowIndex, Qt::UserRole)存储和访问。在QSqlQueryModel查询中会有2列:ID和文本;和QComboBox setModelColumn(1)被定义,即文本。与QSqlQueryModel一起使用QComboBox

如何正确地进行子类化或重新定义QSqlQueryModel,如果combobox->itemData(rowIndex, Qt::UserRole)必须包含ID?谁曾经实施过这样的事情,或者知道某个来源的链接?如果我在一个这样的方式定义QVariant QSqlQueryModel::data(const QModelIndex & item, int role = Qt::DisplayRole)

QVariant MySqlModel::data(const QModelIndex &index, int role) const 
{ 
    if(role == Qt::UserRole && index.column() == 1) 
     return QSqlQueryModel::data(this->index(index.row(), 0), Qt::DisplayRole); 

    return QSqlQueryModel::data(index, role); 
} 

将它的工作,即是否combobox->itemData(rowIndex, Qt::UserRole)将包含在这种情况下ID?还是需要调查Qt的来源?

回答

1

呀,根据QComboBox代码应工作:

QVariant QComboBox::itemData(int index, int role) const 
{ 
    Q_D(const QComboBox); 
    QModelIndex mi = d->model->index(index, d->modelColumn, d->root); 
    return d->model->data(mi, role); 
} 

将实现这一点。