Russian Qt Forum

Qt => Model-View (MV) => Тема начата: DenisKh001 от Сентябрь 03, 2011, 06:52



Название: QTableView и QSqlTableModel не работают в дизайнере
Отправлено: DenisKh001 от Сентябрь 03, 2011, 06:52
В дизайнере нарисован QTableView пытаюсь вставить него QSqlTableModel и ничего не получается :( - таблица пустая. Проблема не в подключении, так как если создавать QTableView и QSqlTableModel в main.cpp таблица отражается.

Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("collect");
    if (!db.open())     return 1;
    Widget w;
    w.show();
    return a.exec();
}

Widget::Widget(QWidget *parent) :  QWidget(parent),  ui(new Ui::Widget)
{
    ui->setupUi(this);
    QSqlTableModel x;
    x.setTable("User");
    x.select();
    ui->tableView->setModel(&x);
}


Название: Re: QTableView и QSqlTableModel не работают в дизайнере
Отправлено: kambala от Сентябрь 03, 2011, 10:48
ты создаёшь QSqlTableModel в стеке, а потому она исчезает при выходе из конструктора. и QSqlDatabase надо передать параметром в модель.
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
   db.setDatabaseName("collect");
   if (!db.open())     return 1;
   Widget w(0, db);
   w.show();
   return a.exec();
}
 
Widget::Widget(QWidget *parent, const QSqlDatabase &db) :  QWidget(parent),  ui(new Ui::Widget)
{
   ui->setupUi(this);
   QSqlTableModel *x = new QSqlTableModel(this, db);
   x->setTable("User");
   x->select();
   ui->tableView->setModel(x);
}


Название: Re: QTableView и QSqlTableModel не работают в дизайнере
Отправлено: DenisKh001 от Сентябрь 03, 2011, 12:03
Да, верно. Так все работает. Однако QSqlDatabase не обязательно передавать параметром в модель, тк если не указать QSqlDatabase используется значение по умолчанию, что мне и надо. Огромное спасибо!