Russian Qt Forum
Ноябрь 25, 2024, 13:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: не отображается таблица  (Прочитано 10302 раз)
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);
В разделителе отображаются пустые окна. Что не так делаю?
Заранее спасибо!
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Декабрь 22, 2012, 21:41 »

передавай виджет-родитель в параметре конструктора всем трём объектам (хотя для модели в принципе необязательно, только надо потом будет её руками удалить)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
kataklysm
Гость
« Ответ #2 : Декабрь 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);
В разделителе отображаются пустые окна. Что не так делаю?
Заранее спасибо!

Правило хорошего тона - указывать родителя в конструкторе объекта.
Записан
Senia_Bezrubashkin
Гость
« Ответ #3 : Декабрь 22, 2012, 22:16 »

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Декабрь 22, 2012, 23:13 »

родителем в принципе может быть любой наследник QObject/QWidget (зависит от класса), но для графических элементов родителем обычно является виджет, внутри которого они находятся. в твоём случае родителем можно поставить главное окно, т.е. this
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Senia_Bezrubashkin
Гость
« Ответ #5 : Декабрь 22, 2012, 23:45 »

Блин... по всякому попробовал. Нифига не работает. Ладно спасибо за ответы, буду думать.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Декабрь 22, 2012, 23:50 »

Код
C++ (Qt)
QSplitter* spt = new QSplitter(Qt::Horizontal, this);
QTableView *view = new QTableView(this);
QSqlTableModel* model = new QSqlTableModel(this);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Senia_Bezrubashkin
Гость
« Ответ #7 : Декабрь 23, 2012, 00:00 »

Я так и сделал. Видимо, косяк в чем то другом.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Декабрь 23, 2012, 00:19 »

так может модель просто данные не грузит, потому и окно пустое?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Senia_Bezrubashkin
Гость
« Ответ #9 : Декабрь 23, 2012, 00:50 »

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

Разница первого (рабочего) приложения от второго небольшая
Код:
     ......................

    QHBoxLayout* mainLayout = new QHBoxLayout;
    view->setModel(model);
    spt->addWidget(view);
    mainLayout->addWidget(spt);
    setLayout(mainLayout);
так все работает.
Но мне нужны все навороты от QMainWindow... и тут засада.
« Последнее редактирование: Декабрь 23, 2012, 01:04 от Senia_Bezrubashkin » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Декабрь 23, 2012, 01:35 »

эм... а что мешает использовать этот код в QMainWindow? или тебе нужен или центральный виджет с док-областями?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Senia_Bezrubashkin
Гость
« Ответ #12 : Декабрь 23, 2012, 01:37 »

Ничего не мешает... вот только он не работает.
Нет, док области не нужны.
« Последнее редактирование: Декабрь 23, 2012, 01:39 от Senia_Bezrubashkin » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Декабрь 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);
   }
};
если не добавлять второй виджет в сплиттер, то естественно разделитель не рисуется. модель взята для примера, чтобы не заполнять какими-то своими данными.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Senia_Bezrubashkin
Гость
« Ответ #14 : Декабрь 23, 2012, 09:47 »

Компилится, но при запуске приложения теперь вообще ничего не происходит.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.086 секунд. Запросов: 23.