来自数据库的QT ComboBox ItemData

时间:2014-12-11 16:56:08

标签: c++ qt sqlite combobox

我有以下代码将QT QComboBox链接到我的sqlite数据库,它运行良好。 但是在我的数据库中,我有与外键链接的Category和Item表。 因此,当我从QComboBox中提取信息时,我需要获取Category_ID而不是框中列出的名称。 如何使用模型或更好的方式将QComboBox ItemData设置为Category_ID字段,然后使用模型将QComboBox ItemData设置为我的类别对象?

谢谢,

void MainWindow::populatCat()
{
    QSqlQueryModel *model = new QSqlQueryModel();
    QString sql;
    sql = "select Category_Name From Category ORDER BY Category_Name ASC;";
    QSqlQuery* query = new QSqlQuery(db);
    query->prepare(sql);
    if(!query->exec()){
        qDebug () << "Query Erorr: " << query->lastError();
    }else{
        qDebug () << "Query Successful: " << query->lastQuery();
    }
    model->setQuery(*query);
    ui->cboCat->setModel(model);
}

1 个答案:

答案 0 :(得分:1)

好的,我现在回答一下。 :)

QComboBox* myBox = new QComboBox();
connect( myBox, SIGNAL( indexChanged( int ) ), this, SLOT( handleIndexChange( int ) ) );

void myObject::handleIndexChange( int /*index*/ ) {
    // We actually don't need the index
    QComboBox* box = qobject_cast<QComboBox*>( sender() );
    if ( box ) {
        QVariant data = box->currentData();  // do whatever w/ data... sounds like call toInt() in your case.
    }
}

我所有三种方法的本质是你必须做一些额外的事情才能获得与更改后当前项目相对应的data()。如果它发出一个以底层数据为参数的信号会很好,但这可能会很昂贵。