QTableView + QSqlTableModel показывает пустое белое окошко |
Здравствуйте, гость ( Вход | Регистрация )
QTableView + QSqlTableModel показывает пустое белое окошко |
genusatplay |
15.12.2008, 0:44
Сообщение
#1
|
Студент Группа: Участник Сообщений: 50 Регистрация: 8.11.2008 Пользователь №: 416 Спасибо сказали: 0 раз(а) Репутация: 0 |
я чтото никак в толк немогу взять почему неработает showdoc() показывает пустое белое окошко
подскажите плиз что нетак написал? MAINWINDOW_H #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QtSql> #include <QtGui> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); private slots: void connectDb(); void disconnectDb(); void showDoc(); private: void createMenus(); QSqlDatabase db; QAction *exitAction; QAction *connectAction; QAction *disconnectAction; QAction *showdocsAction; QMenu *dbMenu; QMenu *docMenu; QSqlTableModel docs; QTableView docsview; }; #endif MainWindow.cpp #include "mainwindow.h" MainWindow::MainWindow() { setWindowTitle(tr("Database editor")); createMenus(); } void MainWindow::createMenus() { dbMenu = menuBar()->addMenu(QObject::tr("&Database")); connectAction = dbMenu->addAction(tr("&Connect")); connect(connectAction,SIGNAL(triggered()),this,SLOT(connectDb())); disconnectAction = dbMenu->addAction(tr("&Disconnect")); disconnectAction->setDisabled(true); connect(disconnectAction,SIGNAL(triggered()),this,SLOT(disconnectDb())); dbMenu->addSeparator(); exitAction = dbMenu->addAction(QObject::tr("E&xit")); exitAction->setShortcut(QKeySequence(QObject::tr("Ctrl+Q"))); exitAction->setStatusTip(QObject::tr("Exit programm")); connect(exitAction,SIGNAL(triggered()),qApp,SLOT(quit())); docMenu = menuBar()->addMenu(tr("Documents")); showdocsAction = docMenu->addAction(tr("Show Documents")); showdocsAction->setDisabled(true); connect(showdocsAction,SIGNAL(triggered()),this,SLOT(showDoc())); } void MainWindow::connectDb() { db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("docs.sqlite"); if (db.open()){ disconnectAction->setEnabled(true); showdocsAction->setEnabled(true); connectAction->setDisabled(true); } else { QMessageBox::warning(this,"Database Error",db.lastError().text()); } } void MainWindow::disconnectDb() { db.close(); if ( !db.isOpen() ){ connectAction->setEnabled(true); disconnectAction->setDisabled(true); showdocsAction->setDisabled(true); } else { QMessageBox::warning(this,"Database Error","Can't disconnected from database"); } } void MainWindow::showDoc() { docs.setTable("elements"); docs.setSort(0,Qt::AscendingOrder); docs.select(); docsview.setModel(&docs); docsview.setWindowTitle(tr("List of documents")); docsview.resizeColumnsToContents(); docsview.show(); } посмотрел несколько примеров из книги... и чета ненашел каким образом коннектится БД с qsqltablemodel там после открытия бд сразу идет выборка в таблицу и работает видимо, но в тех примерах все в 1ой процедуре делается QSqlTableModel::QSqlTableModel ( QObject * parent = 0, QSqlDatabase db = QSqlDatabase() ) Creates an empty QSqlTableModel and sets the parent to parent and the database connection to db. If db is not valid, the default database connection will be used. ну у меня вроде 1 коннект.. так что все должно работать но неработает ( Сообщение отредактировал Litkevich Yuriy - 31.1.2009, 12:42 |
|
|
SABROG |
15.12.2008, 1:18
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Скорее всего проблема в том, что QSqlTable надо создавать после QSqlDatabase. Т.к. на момент создания QSqlTable нет ни одного соединения с базой и конструктор не находит default connection.
|
|
|
genusatplay |
15.12.2008, 1:29
Сообщение
#3
|
Студент Группа: Участник Сообщений: 50 Регистрация: 8.11.2008 Пользователь №: 416 Спасибо сказали: 0 раз(а) Репутация: 0 |
Скорее всего проблема в том, что QSqlTable надо создавать после QSqlDatabase. Т.к. на момент создания QSqlTable нет ни одного соединения с базой и конструктор не находит default connection. я сразу не понял это.. чет забыл что создаю так "qsqltablemodel docs;" вот и была трабла.. и еще вопрос.. а можно добавлять новые элементы в талблицу при помощи qsqltablemodel или ему подобных? Сообщение отредактировал genusatplay - 15.12.2008, 3:39 |
|
|
Litkevich Yuriy |
15.12.2008, 7:29
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
и еще вопрос.. а можно добавлять новые элементы в талблицу при помощи qsqltablemodel или ему подобных? можно, я соорудил пару виджетов и их везде пользую:1) TableEditor 2) RelationTableEditor тут: sqleditors.zip ( 7,66 килобайт ) Кол-во скачиваний: 559 пользую так: 1) интерфейс наследника TableEditor
реализация наследника TableEditor
2) интерфейс наследника RelationTableEditor
реализация наследника RelationTableEditor
|
|
|
Текстовая версия | Сейчас: 12.12.2024, 8:16 |