gpt4 book ai didi

c++ - QTableView 不显示

转载 作者:行者123 更新时间:2023-11-28 07:05:13 24 4
gpt4 key购买 nike

我有一个小部件 (mainWindow),其中有一个 dockWidget(代码就在下面)。

停靠小部件确实出现了。但不是里面的tableView。我还尝试在客户端小部件构造函数中强制执行:“this->setWidget(ui->tableView)”。

这里的“模型”是一个 QSqlRelationalTableModel,它是该类的私有(private)成员。

clientWidget.cpp

#include "clientwidget.h"
#include "ui_clientwidget.h"
#include "dbwrapper.h"

clientWidget::clientWidget(QWidget *parent) :
QDockWidget(parent),
ui(new Ui::clientWidget),
model(this,dbWrapper::getInstance()->getDb())
{
ui->setupUi(this);

model.setTable("Client");
model.setEditStrategy(QSqlTableModel::OnManualSubmit);
model.setHeaderData(0, Qt::Horizontal, QObject::tr("id"));
model.setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));
model.setHeaderData(2, Qt::Horizontal, QObject::tr("Zipcode"));
model.setHeaderData(3, Qt::Horizontal, QObject::tr("Country"));

model.setHeaderData(4, Qt::Horizontal, QObject::tr("phone"));

model.setHeaderData(5, Qt::Horizontal, QObject::tr("fax"));
model.setHeaderData(6, Qt::Horizontal, QObject::tr("email"));
model.setHeaderData(7, Qt::Horizontal, QObject::tr("taxId"));

model.select();
ui->tableView->setModel(&model);
}

clientWidget::~clientWidget()
{
delete ui;
}

虽然 setupUI 看起来像这样:

void setupUi(QDockWidget *clientWidget)
{
if (clientWidget->objectName().isEmpty())
clientWidget->setObjectName(QStringLiteral("clientWidget"));
clientWidget->resize(616, 406);
dockWidgetContents = new QWidget();
dockWidgetContents->setObjectName(QStringLiteral("dockWidgetContents"));
tableView = new QTableView(dockWidgetContents);
tableView->setObjectName(QStringLiteral("tableView"));
tableView->setGeometry(QRect(5, 231, 601, 141));
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy.setHorizontalStretch(1);
sizePolicy.setVerticalStretch(1);
sizePolicy.setHeightForWidth(tableView->sizePolicy().hasHeightForWidth());
tableView->setSizePolicy(sizePolicy);
clientWidget->setWidget(dockWidgetContents);

retranslateUi(clientWidget);

QMetaObject::connectSlotsByName(clientWidget);
} // setupUi

我也是 Qt GUI 方面的新手。欢迎任何想法。

编辑:

我尝试在构造函数的末尾添加以下行的许多组合:

    ui->tableView->setModel(&model);
this->setWidget(ui->tableView);
this->ui->tableView->show();
this->show();

编辑解决方案:

问题完全出在别处:我的 sqlite 数据库不包含请求的表。这很奇怪我认为复制/粘贴 sqlite db 文件会复制数据库?原来的那个里面有 table 。

最佳答案

参见 QDockWidget::setWidget 的文档:

If the dock widget is visible when widget is added, you must show() it explicitly.

看来你需要添加一行来显示:

clientWidget->setWidget(dockWidgetContents);
dockWidgetContents->show();

关于c++ - QTableView 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866904/

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