Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: uriel от Январь 04, 2010, 16:14



Название: Регресс в QMdiSubWindow?
Отправлено: uriel от Январь 04, 2010, 16:14
Пересобрал рабочий проект с 4.6 (до этого был на 4.5) и получил под линуксом кучу warning'ов при запуске.
Как оказалось, у меня поведение воспроизводится элементарно.
Код
C++ (Qt)
#include <QApplication>
#include <QMdiSubWindow>
//
int main(int argc, char *argv[]) {
 QApplication app(argc, argv);
 
 QMdiSubWindow dummy;
}
На выходе получаю в консоль "QWidget::setMinimumSize: (/QMdi::ControlLabel) Negative sizes (-1,-1) are not possible".
Может кто-нибудь проверить это у себя, если не трудно?

P.S. Сижу на Арче под KDE, все пакеты последние. На 4.5.3 такого поведения нет, под виндой тоже, даже с 4.6.0.


Название: Re: Регресс в QMdiSubWindow?
Отправлено: BRE от Январь 04, 2010, 16:38
А для чего ты так делаешь?   ;)

Цитировать
The most common way to construct a QMdiSubWindow is to call QMdiArea::addSubWindow() with the internal widget as the argument. You can also create a subwindow yourself, and set an internal widget by calling setWidget().


Название: Re: Регресс в QMdiSubWindow?
Отправлено: uriel от Январь 04, 2010, 17:29
Отвечает Александр Друзь. :)
Просто проект писался очень давно, ещё в пору изучения Qt и я почему-то решил отнаследоваться от QMdiSubWindow, так что предупреждение вылетает при инициализации базового класса.
В принципе перекроить там не особо сложно, спасибо за наводку. ;)


Название: Re: Регресс в QMdiSubWindow?
Отправлено: uriel от Январь 04, 2010, 18:00
А тем временем ничего не изменилось.
Код
C++ (Qt)
#include <QApplication>
#include <QMdiArea>
#include <QLabel>
//
int main(int argc, char *argv[]) {
 QApplication app(argc, argv);
 
 QLabel *lbl = new QLabel("Foo");
 
 QMdiArea area;
 area.addSubWindow(lbl);
 
 area.show();
 
 return app.exec();
}


Название: Re: Регресс в QMdiSubWindow?
Отправлено: crossly от Январь 04, 2010, 22:03
Пересобрал рабочий проект с 4.6 (до этого был на 4.5) и получил под линуксом кучу warning'ов при запуске.
Как оказалось, у меня поведение воспроизводится элементарно.
Код
C++ (Qt)
#include <QApplication>
#include <QMdiSubWindow>
//
int main(int argc, char *argv[]) {
 QApplication app(argc, argv);
 
 QMdiSubWindow dummy;
}
На выходе получаю в консоль "QWidget::setMinimumSize: (/QMdi::ControlLabel) Negative sizes (-1,-1) are not possible".
Может кто-нибудь проверить это у себя, если не трудно?

P.S. Сижу на Арче под KDE, все пакеты последние. На 4.5.3 такого поведения нет, под виндой тоже, даже с 4.6.0.

вы создали QMdiSubWindow, но не создали QMdiArea.... и не добавили окно в него.... странно.... что вы хотели этим добиться...??


Название: Re: Регресс в QMdiSubWindow?
Отправлено: uriel от Январь 04, 2010, 22:58
Конкретно этим примером - минимальных условий для получения предупреждения. :)
Чуть ниже я выложил более "правильный" код, который, тем не менее, всё равно его кидает.


Название: Re: Регресс в QMdiSubWindow?
Отправлено: crossly от Январь 05, 2010, 13:40
возможно потому что на момент создания subwindow размер главного окна и MdiArea еще не известен.... ?


Название: Re: Регресс в QMdiSubWindow?
Отправлено: uriel от Январь 05, 2010, 15:59
Так, причина нашлась, только понятнее не стало.
Внутренний класс ControlLabel (как-бы-системное-меню для дочерних окон) в конструкторе устанавливает свой размер в зависимости от размера иконки приложения (QApplication::windowIcon()), а так как явно я никакой иконки не вешал, то её нет и отсюда и берутся те самые  (-1, -1) в качестве размера.
Короче, на самом деле изменения в поведении вот здесь:
Код
C++ (Qt)
#include <QApplication>
#include <QIcon>
#include <QDebug>
//
int main(int argc, char *argv[]) {
 QApplication app(argc, argv);
 
 qDebug() << QApplication::windowIcon().isNull();
 qDebug() << QApplication::windowIcon().pixmap(16, 16).size();
}
В 4.5 мы получим (0, 0), а в 4.6 (-1, -1), хотя и там и там первая строка выводит true.
Буду копать дальше. :)