c++ - 将模型设置为 QTableWidget

标签 c++ sql qt

我想编写一个可以访问数据库中的表的应用程序。我将 QSqlTableModel 作为表格的模型组件。

QTableView 的问题在于它似乎没有返回表中当前选定记录的方法,所以我采用了与 QTableView 交互的 QTableWidget 类。

但是当我尝试使用 ->setModel() 将模型设置为这个表格小部件时,我得到了

以下错误信息:

c:/Qt/qt/include/QtGui/../../src/gui/itemviews/qtablewidget.h:337: error: `virtual void QTableWidget::setModel(QAbstractItemModel*)' is private.

消息说“setModel”方法是私有(private)的。展望 文档告诉我它是公开的。

我能做什么?

最佳答案

正如其他人所指出的,您想要的不是 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;
}

如果,OTOH,您正在连接到 QTableView 的 - 比如说 - clicked(QModelIndex) 信号的插槽中工作(实际上:QAbstractItemView), 那么这段代码就是你想要的:

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'
} 

是的,Qt 可以内置,尤其是。 QSqlTableModel 可以有更方便的方法将 QModelIndex 映射回 QSqlRecord,但就这样吧。

关于c++ - 将模型设置为 QTableWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1137732/

相关文章:

PHP/MySQL 显示 MySQL 表中的单个记录

c++ - 在类型 : map<int, map<int, int>> 上使用 operator[][] 时不会更新值

C++ 参数在运行时发生变化

c++ - std::unique_ptr 如何没有大小开销?

c++ - QGraphicsScene 中的 QGraphicsView 大小

qt - 如何在 QML 的 TextEdit 中限制用户输入的最大行数

c++ - 从线程 C++ 循环中定期更改 QML 属性值

c++ - MFC 按钮单击响应转义键

SQL - 数组作为所选数据的一部分

java - 在 Java 中使用 SQL 语句插入数字数据类型