Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: andi от Май 25, 2005, 07:41



Название: Вопрсы по использованию отдельных компонентов.
Отправлено: andi от Май 25, 2005, 07:41
Пишу многооконное приложение. Много окон в одном. Пользуюсь в основном примерами из книги (чего-то там про qt c opennet.ru).
Возникло пара-тройка вопросов.
Вопрос 1:
Для многооконности использую QWorkspace, все получается.
Когда одно из окон хочу сделать со сплиттером (QSplitter):
Код:

Spectr::Spectr(QWidget *parent, const char *name, WFlags flags)
    : QWidget(parent, name, flags | WNoAutoErase)
{
// стряпаем интерфейс
//QSplitter *Vsplit = new QSplitter(Vertical,this);
QSplitter *Vsplit = new QSplitter(Vertical,parent);
QSplitter *Hsplit = new QSplitter(Horizontal, Vsplit);
....


если указать в качестве родителя основного сплиттера this (закоментированная строка), то сплиттер получается как бы вписан в прямоугольник размера не превышающий определенного размера. И когда окошко растягиваешь на весь экран, рабочая часть остается в виде прямоугольника в верхнем левом углу покрывая примерно 1/3 пространства. Если указать ему parent, то он растягивается вслед за размерами экрана. Но вместо одного окна получается два. Причем, что интересно, сначало появляется пустое окно принадлежащее классу Spectr (у него есть название устанавливаемое, после инициализации), а потом уже окно со сплиттером, так, как сплиттер я ни как не называл, то и заголовка у него нет. В остальном никаких неудобств не испытываю. Как извернуться так, чтоб и сплиттер на все окно был и двух окошек не выскакивало?

Вопрос 2. Когда я сразу после запуска приложения создаю несколько окошек, а потом щелкаю их по крестикам, что происходит? Соответствующие объекты удаляются из памяти? Или к ним как-то еще можно добраться? В случае если они динамически созданы, тогда вероятней всего удаляются из памяти. А вот если они объявленны статически, что будет?

Вопрос 3. Хочу использовать вызов processEvents()
В книге и в Qt Assistant, есть пара примеров на эту тему. Везде используется конструкция вида:
qApp->processEvents();
При этом qApp нигде кроме этой строки не встречается. Это раз, даже если использовать такой вызов QApplication::processEvents();
При компиляции выскакивает ошибка
error: incomplete type 'QApplication' cannot be used to name a
   scope
Я так понимаю нужен еще один заголовочник?
При добавлении заголовочника, выскакивет сообщение, что  эту функцию можно вызывать только с объектом.
Так все таки, как правильно?


Название: Вопрсы по использованию отдельных компонентов.
Отправлено: lepsai от Май 25, 2005, 15:19
qApp - есть глобальный указатель, для того, что бы его использовать достаточно: #include <qapplication.h>


Название: Вопрсы по использованию отдельных компонентов.
Отправлено: Keiko от Май 25, 2005, 22:49
вопрос 2.:

статически это как ? :) немодальные окна должны создаваться только с помощью new, иначе толку от них нет.

насчёт удаления после закрытия я хз, вроде они удаляются. Есть также флаг такой

Цитировать

Qt::WDestructiveClose - makes Qt delete this widget when the widget has accepted closeEvent(), or when the widget tried to ignore closeEvent() but could not.


Название: Вопрсы по использованию отдельных компонентов.
Отправлено: andi от Май 26, 2005, 06:31
Спасибо за ответы.
С qApp разобрался, получилось как надо.
Есть еще один не принципиальный вопрос. Когда запускаю приложение, то оформление главного окна соответствует установленному стилю KDE. Но окна внутри главного имеют другой стиль. Причем, у модальных окон стиль такой же как и у главного окна, а у не модальных какой-то корявый.
Где собака порылась?


Название: Вопрсы по использованию отдельных компонентов.
Отправлено: Sergeich от Май 27, 2005, 18:00
Цитата: "andi"
у модальных окон стиль такой же как и у главного окна, а у не модальных какой-то корявый.
Где собака порылась?

Заголовки главного окна и модальных окон отрисовываются оконным менеджером, а MDI окна рисует сама Qt, отсюда и разница


Название: Вопрсы по использованию отдельных компонентов.
Отправлено: andi от Май 31, 2005, 10:01
в продолжении темы про окна. А в каком направлении порыть относительно прорисовки MDI окна? Какие используются методы/способы/приемы? Можно ли как-то скопировать стиль оформления с главного окна и передать в дочернее?