qt之QTableview顯示及單元格內容獲取


qt中的顯示模式是model/view方式。

一、數據顯示

 我常用兩種方式利用qtableview顯示數據。

如下述代碼所述,條件編譯對應的不同代碼代表了兩種不同的顯示方式。第一種方式利用QSqlQueryModel,利用不同的sql語句,顯示不同的表格和數據。

void MeasureDB::showDataTable(tableInfo &table,QString filter)
{
#if 0
    qDebug()<<"cur filter string"<<filter;
    QSqlQueryModel *queryModel = new QSqlQueryModel(this);
    QSqlQuery query(currDatabase());
    QString strSql=QString("select * from %1 where tm like \'%2%\' order by id DESC")
            .arg(table.name).arg(filter);
    if(query.exec(strSql))
    {
        queryModel->setQuery(query);
        for(int i=0;i<table.fieldTitles.split(',').count();i++)
        {
            QString tmp=table.fieldTitles.split(',').at(i);
            queryModel->setHeaderData(i,Qt::Horizontal, QString(tmp.left(tmp.length()-1)));
        }
        while (queryModel->canFetchMore())
            queryModel->fetchMore();
        table.tableView->setModel(queryModel);
    }
    else
        qDebug()<<"query error,string sql"<<strSql;
#else
    if(!filter.isEmpty())
        filter=QString("tm like \'%1%\' ").arg(filter);
    model->setTable(table.name);
    qDebug()<<"filter "<<filter;
    model->setEditStrategy(QSqlTableModel::OnRowChange);
    if(!filter.isEmpty())
        model->setFilter(filter);
    model->setSort(0,Qt::DescendingOrder);
    model->select();
    table.view->setModel(model);
    table.view->resizeColumnsToContents();//表格列寬自適應調整
tableView->verticalHeader()->setHidden(true);//左側行號隱藏
#endif 
}

  第二方式,定義QSqlTableModel指針,設置過濾條件、顯示表格、排序方式也可實現表格的顯示。我使用過程中兩點注意事項:

1,前面使用QSqlTableModel時,先對其進行繼承后再利用。作為小白一枚,當時覺得QSqlTableMode是抽象類,看來還需要認知下什么叫做抽象類。

2,以前顯示表格的時候,每列專門設置列寬用來顯示不同的列。實際只需要調用resizeColumnsToContents函數,就可以自適應調整顯示的列寬。

model = new QSqlTableModel(m_tableView,currDatabase());

二、獲取QTableView單元格內容

 代碼如下,代碼中tbIP為QTableView對象,下述代碼就可以獲取當前QTableview對象單元格(當前行,packages列)的內容。另,如果修改單元格內容,則需要利用上述第二種表格顯示方式。

QSqlTableModel *model=(QSqlTableModel *)ui->tbIP->model();
qDebug()<<"cur value"<<model->record(index.row()).value("packages").toString();

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM