【问题标题】:QTableView does not show upQTableView 不显示
【发布时间】:2014-02-18 22:32:09
【问题描述】:

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

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

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

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 文件会编译数据库?原来的里面有桌子。

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    请参阅QDockWidget::setWidget 的文档:

    如果添加小部件时停靠小部件可见,则必须显式显示()它。

    看来需要加一行显示:

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

    【讨论】:

    • 无论如何都是为了努力和评论的准确性而接受的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多