我想编写一个可以访问数据库中的表的应用程序.我把QSqlTableModel作为表的模型组件.
QTableView的问题在于它似乎没有返回表中当前所选记录的方法,所以我采用了QTableWidget类来交换QTableView.
但是当我尝试使用 - > setModel()将模型设置为此表小部件时,我得到了
以下错误消息:
c:/ Qt/qt/include/QtGui /../../ src/gui/itemviews/qtablewidget.h:337:错误:`virtual void QTableWidget :: setModel(QAbstractItemModel*)'是私有的.
消息说方法"setModel"是私有的.查看文档告诉我它是公开的.
我能做什么?
正如其他人所说,并不是QTableWidget你想要的.确实如此QTableView.然后像这样完成记录:
static QList<QSqlRecord> selected_records( const QTableView * tv ) {
    // make sure we're really dealing with what we think we're dealing with:
    assert( static_cast<QSqlTableModel*>( tv->model() )
            == qobject_cast<QSqlTableModel*>( tv->model() );
    const QSqlTableModel * const tm = static_cast<QSqlTableModel*>( tv->model() );
    const QModelIndexList mil = tv->selectionModel()->selectedRows();
    QList<QSqlRecord> result;
    Q_FOREACH( const QModelIndex & mi, mil )
        if ( mi.isValid() )
            result.push_back( tm->record( mi.row() ) );
    return result;
}
Run Code Online (Sandbox Code Playgroud)
如果,OTOH,你正在一个连接到(真的:) clicked(QModelIndex)信号的插槽中工作,那么这个代码就是你想要的:QTableViewQAbstractItemView
void slotClicked( const QModelIndex & mi ) {
    // make sure we're really dealing with what we think we're dealing with:
    assert( static_cast<QSqlTableModel*>( tableView->model() )
            == qobject_cast<QSqlTableModel*>( tableView->model() );
    const QSqlRecord rec = static_cast<QSqlTableModel*>( tableView->model() )
               ->record( mi.row() );
    // use 'rec'
} 
Run Code Online (Sandbox Code Playgroud)
是的,Qt可以有内置的,尤其是.QSqlTableModel可以有一种更方便的方式将背景映射QModelIndex到a QSqlRecord,但是你去了.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           17062 次  |  
        
|   最近记录:  |