crossplatform.ru

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


  Ответ в Проблема с QTableView
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Terep Дата 20.11.2010, 17:23
  Под Дебианом работает :blink:
Кинулся скорее добивать диплом под ним.
Terep Дата 20.11.2010, 16:47
  Как то странно.
Названия таблиц дергает, схему показывает, а при двойном клике по таблице рушится и семерка начинает искать причину падения...
На любой таблице такая реакция
Litkevich Yuriy Дата 20.11.2010, 16:21
 
Цитата(Terep @ 20.11.2010, 14:21) *
Хотя в деструкторе убиваю соединение:
ты не правильно удаляешь соединение, смотри описание соответствующего метода.
Но проблема отображения не в этом. В принципе можно вообще не удалять соединение.

Terep, открой свою таблицу в демке - sqlbrowser будет ли работать?
Terep Дата 20.11.2010, 16:15
  И еще, может кто подскажет почему вот от этого:
QString str = "employee";
    model->setTable(str);

приложению хорошо

А при таком раскладе:
model->setTable("employee");


падает на
model->select();
Terep Дата 20.11.2010, 13:00
  В данный момент:

#include "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()
{
    db.close();
    QSqlDatabase::removeDatabase("QMYSQL");
    delete(lay);
    delete(butCon);
    model->clear();
    delete(model);
    delete(view);
}

void MainWindow::slotCon()
{
    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;
    QString str = "tereptab";
    model->setTable(str);
    model->select();
    view = new QTableView;
    view->setModel(model);
    view->show();
    setCentralWidget(view);
}


Таблица по прежнему не выводится :(
В соседней теме прочитал, что варнинг по поводу незакрытого соединения при выходе можно игнорить.
В чем проблема так и не могу понять...
Terep Дата 20.11.2010, 12:21
  К сожалению, уже много раз пробовал и так и сяк.
В данный момент :
    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;
    QString str = "tereptab";
    model->setTable(str);
    model->select();
    view = new QTableView;
    view->setModel(model);
    view->show();
    setCentralWidget(view);


результат тот же, то есть заголовки дергает нормально, а саму таблицу нет.

upd возможно, это все потому что:
Цитата
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.

И из-за этого она просто не может селект * выполнить.

Хотя в деструкторе убиваю соединение:

MainWindow::~MainWindow()
{
    db.close();
    db.removeDatabase(db.connectionName());
}


Может, еще и модель надо разрушать..
BRE Дата 20.11.2010, 12:12
  Попробуй вначале настраивать модель (setTable, select), а потом указать ее view. Хотя модель во время select должна сама уведомить view.

Точно таблица не пустая? :)
Terep Дата 20.11.2010, 12:07
 
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:
BRE Дата 20.11.2010, 11:52
  Объект QSqlTableModel нужно создавать после открытия базы данных, но создавать его нужно на куче.
Terep Дата 20.11.2010, 11:45
  Сделал так:

mainwindow.h

#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;
    QSqlTableModel *model;



private slots:
    void slotCon();
};


#endif // MAINWINDOW_H

mainwindow.cpp

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

MainWindow::MainWindow()
{
    mainWidget = new QWidget();
    model = new QSqlTableModel;
    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" );
    if (!db.open())
        {
            QMessageBox::warning( 0 , "Error! Not connect to base", db.lastError().databaseText());
        }
    QTableView *view = new QTableView;
    QString str = "tereptab";
    view->setModel(model);
    model->setTable(str);
    model->select();
    view->show();
    setCentralWidget(view);
}


Где-то еще проблема... :(
View теперь совсем отсутствует.

Unable to find table tereptab.
Буду разбираться.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.4.2024, 8:41