crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Проблема с QTableView, не выводится таблица
Terep
  опции профиля:
сообщение 20.11.2010, 11:11
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 20.11.2010
Пользователь №: 2204

Спасибо сказали: 0 раз(а)




Репутация:   0  


Приветствую.
Я здесь новенький. Хотя читаю форум и сайт постоянно, решил зарегаться только сейчас.
Не бейте палками, знаю, что тема избитая, но мне нужна помощь. Долгие чтения статей на trolltech.com, на этом форуме/сайте мне не помогли.

Пишу диплом на QT, параллельно изучая ее.

Итак проблема.
Код:
#include <QtGui>
#include <QtSql>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase( "QMYSQL" );
    db.setDatabaseName( "dbname" );
    db.setUserName( "root" );
    db.setPassword("pass");
    db.setHostName( "localhost" );
    db.open();
    if (!db.open())
        {
            QMessageBox::warning( 0 , "Error! Not connect to base", db.lastError().databaseText());
        }
    QSqlTableModel model;// = new QSqlTableModel;
    QTableView *view = new QTableView;
    QString str = "tereptab";
    view->setModel(&model);
    model.setTable(str);
    model.select();
    view->show();
    app.exec();
    return 0;

Работает прекрасно, проблем не возникает.
Но когда я начинаю его пользовать в своем дипломнике, начинаются проблемы.

В поиске решения, я написал небольшой пример, наглядно демонтрирующий проблему:
[b]main.cpp[/b]

#include <QtGui>
#include <QtSql>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow *mw = new MainWindow();
        mw->setGeometry(200,200,640,480);
        mw->show();
        app.setStyle(new QPlastiqueStyle);
    app.exec();
    return 0;
}
//---------------------------------------------------
[b]mainwindow.cpp[/b]
#include "mainwindow.h"
//#include "ui_mainwindow.h"
#include <QtSql>

MainWindow::MainWindow()
{
    mainWidget = new QWidget();
    lay = new QVBoxLayout;
    butCon = new QPushButton(tr("Connect"));
    connect(butCon, SIGNAL(clicked()), this, SLOT(slotCon()));
    lay->addWidget(butCon);
    mainWidget->setLayout(lay);
    setCentralWidget(mainWidget);
}

MainWindow::~MainWindow()
{
}

void MainWindow::slotCon()
{
    QSqlDatabase db = QSqlDatabase::addDatabase( "QMYSQL" );
    db.setDatabaseName( "terep" );
    db.setUserName( "root" );
    db.setPassword("vertrigo");
    db.setHostName( "localhost" );
    db.open();
    if (!db.open())
        {
            QMessageBox::warning( 0 , "Error! Not connect to base", db.lastError().databaseText());
        }
    QSqlTableModel model;// = new QSqlTableModel;
    QTableView *view = new QTableView;
    QString str = "tereptab";
    view->setModel(&model);
    model.setTable(str);
    model.select();
    view->show();
    setCentralWidget(view);
}
//---------------------------------------------------
[b]mainwindow.h[/b]

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>

#include <QtGui>
#include <QtSql>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow();
    ~MainWindow();
    QPushButton *butCon;
    QVBoxLayout *lay;
    QWidget *mainWidget;


private slots:
    void slotCon();
};


#endif // MAINWINDOW_H


Проблема заключается в том, что в первом варианте таблица отображается нормально.
Во втором (необходимом) это выглядит так:


То есть сам Грид куда то девается.

Прошу помощи. Уже вот вот грядет защита :)

ps пишу под 7ой виндой, QT 2010.05
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Terep
  опции профиля:
сообщение 20.11.2010, 12:07
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 20.11.2010
Пользователь №: 2204

Спасибо сказали: 0 раз(а)




Репутация:   0  


QSqlDatabase db = QSqlDatabase::addDatabase( "QMYSQL" );
    db.setDatabaseName( "terep" );
    db.setUserName( "root" );
    db.setPassword("vertrigo");
    db.setHostName( "localhost" );
    if (!db.open())
        {
            QMessageBox::warning( 0 , "Error! Not connect to base", db.lastError().databaseText());
        }
    model = new QSqlTableModel;
    QTableView *view = new QTableView;
    QString str = "employee";
    view->setModel(model);
    model->setTable(str);
    model->select();
    QMessageBox::warning( 0 , "Error! Not connect to base", model->lastError().text());
    view->show();
    view->showGrid();
    setCentralWidget(view);


Ну вот, к базе подключились, с таблицей проблем нет, есть одна с отображением:


И, простите, что значит "на куче"?


upd то есть таблица не отобразилась. она точно не пустая.

upd про кучу понял :rolleyes:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


9 чел. читают эту тему (гостей: 9, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.1.2025, 2:02