2015-09-19 135 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); 
} 

將實現這一點。