2014-02-18 3 views
0

У меня есть виджет (mainWindow), в котором есть dockWidget (тот, чей код находится справа).QTableView не отображается

Виджет док-станции отображается. Но не 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 питания. Любая идея будет приветствоваться.

EDIT:

я пытался добавить много комбинацию из следующих строк в конце конструктора:

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

EDIT РЕШЕНИЕ:

проблема лгал полностью в другом месте: моя база данных sqlite не содержала запрошенную таблицу. Это странно, я думал, что копирование/вставка файла sqlite db будет компилировать базу данных? У оригинала была таблица.

ответ

1

Смотрите документацию для QDockWidget::setWidget:

Если прикрепляемый виджет виден при добавлении виджета, вы должны показать() это явно.

Кажется, вам нужно добавить строку для показа:

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

спасибо! Я проверю это, как только я уйду из офиса. – user2346536

+0

хорошо не работает ... тоже. – user2346536

+0

принимается ради усилий и точности комментариев в любом случае. – user2346536

Смежные вопросы