gpt4 book ai didi

c++ - 将模型设置为 QTableWidget

转载 作者:可可西里 更新时间:2023-11-01 18:30:08 28 4
gpt4 key购买 nike

我想编写一个可以访问数据库中的表的应用程序。我将 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com