Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Senia_Bezrubashkin от Декабрь 22, 2012, 18:49



Название: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 22, 2012, 18:49
Класс наследуется от QMainWindow.
Фрагмент конструктора...
Код:
QSplitter* spt = new QSplitter(Qt::Horizontal);
QTableView *view = new QTableView;
QSqlTableModel* model = new QSqlTableModel;

          ..........................

view->setModel(model);
spt->addWidget(view);
setCentralWidget(spt);
В разделителе отображаются пустые окна. Что не так делаю?
Заранее спасибо!


Название: Re: не отображается таблица
Отправлено: kambala от Декабрь 22, 2012, 21:41
передавай виджет-родитель в параметре конструктора всем трём объектам (хотя для модели в принципе необязательно, только надо потом будет её руками удалить)


Название: Re: не отображается таблица
Отправлено: kataklysm от Декабрь 22, 2012, 21:47
Класс наследуется от QMainWindow.
Фрагмент конструктора...
Код:
QSplitter* spt = new QSplitter(Qt::Horizontal);
QTableView *view = new QTableView;
QSqlTableModel* model = new QSqlTableModel;

          ..........................

view->setModel(model);
spt->addWidget(view);
setCentralWidget(spt);
В разделителе отображаются пустые окна. Что не так делаю?
Заранее спасибо!

Правило хорошего тона - указывать родителя в конструкторе объекта.


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 22, 2012, 22:16
передавай виджет-родитель в параметре конструктора всем трём объектам
А как узнать какой там виджет-родитель? И еще... в разделитель я передаю несколько тестовых объектов, они отображаются. Не отображается только один (таблица). В другом приложении (без наследования от QMainWindow) все работает. Объясните популярней... по-возможности.


Название: Re: не отображается таблица
Отправлено: kambala от Декабрь 22, 2012, 23:13
родителем в принципе может быть любой наследник QObject/QWidget (зависит от класса), но для графических элементов родителем обычно является виджет, внутри которого они находятся. в твоём случае родителем можно поставить главное окно, т.е. this


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 22, 2012, 23:45
Блин... по всякому попробовал. Нифига не работает. Ладно спасибо за ответы, буду думать.


Название: Re: не отображается таблица
Отправлено: kambala от Декабрь 22, 2012, 23:50
Код
C++ (Qt)
QSplitter* spt = new QSplitter(Qt::Horizontal, this);
QTableView *view = new QTableView(this);
QSqlTableModel* model = new QSqlTableModel(this);


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 23, 2012, 00:00
Я так и сделал. Видимо, косяк в чем то другом.


Название: Re: не отображается таблица
Отправлено: kambala от Декабрь 23, 2012, 00:19
так может модель просто данные не грузит, потому и окно пустое?


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 23, 2012, 00:50
Может... но в приложении без наследования от QMainWindow все работает. Когда пытаюсь в центральную область вставлять (с небольшими изменениями, как описано в примерах) все ломается. Причем, тестовые объекты (текстовый редактор) отображается нормально и в первом приложении и во втором.


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 23, 2012, 00:57
Разница первого (рабочего) приложения от второго небольшая
Код:
     ......................

    QHBoxLayout* mainLayout = new QHBoxLayout;
    view->setModel(model);
    spt->addWidget(view);
    mainLayout->addWidget(spt);
    setLayout(mainLayout);
так все работает.
Но мне нужны все навороты от QMainWindow... и тут засада.


Название: Re: не отображается таблица
Отправлено: kambala от Декабрь 23, 2012, 01:35
эм... а что мешает использовать этот код в QMainWindow? или тебе нужен или центральный виджет с док-областями?


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 23, 2012, 01:37
Ничего не мешает... вот только он не работает.
Нет, док области не нужны.


Название: Re: не отображается таблица
Отправлено: kambala от Декабрь 23, 2012, 02:58
вот так всё работает:
Код
C++ (Qt)
class MainWindow : public QMainWindow
{
public:
   MainWindow(QWidget *parent = 0, Qt::WindowFlags flags = 0) : QMainWindow(parent, flags)
   {
       QSplitter *splitter = new QSplitter(this);
       QTableView *tableView = new QTableView(this);
       QFileSystemModel *model = new QFileSystemModel(this);
       model->setRootPath("/");
       tableView->setModel(model);
 
       splitter->addWidget(tableView);
       splitter->addWidget(new QTableWidget(1, 1, this));
       setCentralWidget(splitter);
   }
};
если не добавлять второй виджет в сплиттер, то естественно разделитель не рисуется. модель взята для примера, чтобы не заполнять какими-то своими данными.


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 23, 2012, 09:47
Компилится, но при запуске приложения теперь вообще ничего не происходит.


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 23, 2012, 10:13
Ну, точно данные не грузятся... с тестовыми объектами все работает.


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 23, 2012, 10:21
Вроде бы все как в их примере делаю... а вот не грузятся.
Код:
MainWindow::MainWindow(const QString &tableName, QWidget *parent) : QMainWindow(parent)
{
     QSqlTableModel* model = new QSqlTableModel(this);
     QSplitter* spt = new QSplitter(Qt::Horizontal, this);
            
     model->setTable(tableName);
     model->setEditStrategy(QSqlTableModel::OnManualSubmit);
     model->select();
     model->setHeaderData(0, Qt::Horizontal, tr("ID"));
     model->setHeaderData(1, Qt::Horizontal, tr("First name"));
     model->setHeaderData(2, Qt::Horizontal, tr("Last name"));
    
     view->setModel(model);
     spt->addWidget(view);    
     setCentralWidget(spt);
     ..............................
}
Причем, как и говорил, без наследования от QMainWindow, и с небольшими изменениями (которые, кстати, не касаются самой модели) в другом приложении грузятся и отображаются как надо.


Название: Re: не отображается таблица
Отправлено: Old от Декабрь 23, 2012, 10:27
Причем, как и говорил, без наследования от QMainWindow, и с небольшими изменениями (которые, кстати, не касаются самой модели) в другом приложении грузятся и отображаются как надо.
А база где открывается? Точно что она открывается до конструирования главного окна?


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 23, 2012, 10:42
вот ссыль на их пример... http://doc.qt.digia.com/4.5/sql-cachedtable.html (http://doc.qt.digia.com/4.5/sql-cachedtable.html) все сделал как там... работает. Попытался проделать тоже самое с QMainWindow... не получается. На страничке не хватает файла connection.h, но он есть в экзамплах при установке кьюта, в нем все, что связанно с открытием и подключением... все работает, проверенно.


Название: Re: не отображается таблица
Отправлено: Senia_Bezrubashkin от Декабрь 23, 2012, 11:24
А база где открывается? Точно что она открывается до конструирования главного окна?
Твою мать... переставил строки местами в main.cpp
Код:
if (!createConnection())
         return 1;  
MainWindow mainWin("person");
все заработало... спасибо!