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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Регресс в QMdiSubWindow?  (Прочитано 7720 раз)
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.
Записан
BRE
Гость
« Ответ #1 : Январь 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().
Записан
uriel
Гость
« Ответ #2 : Январь 04, 2010, 17:29 »

Отвечает Александр Друзь. Улыбающийся
Просто проект писался очень давно, ещё в пору изучения Qt и я почему-то решил отнаследоваться от QMdiSubWindow, так что предупреждение вылетает при инициализации базового класса.
В принципе перекроить там не особо сложно, спасибо за наводку. Подмигивающий
Записан
uriel
Гость
« Ответ #3 : Январь 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();
}
Записан
crossly
Гость
« Ответ #4 : Январь 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.... и не добавили окно в него.... странно.... что вы хотели этим добиться...??
Записан
uriel
Гость
« Ответ #5 : Январь 04, 2010, 22:58 »

Конкретно этим примером - минимальных условий для получения предупреждения. Улыбающийся
Чуть ниже я выложил более "правильный" код, который, тем не менее, всё равно его кидает.
Записан
crossly
Гость
« Ответ #6 : Январь 05, 2010, 13:40 »

возможно потому что на момент создания subwindow размер главного окна и MdiArea еще не известен.... ?
Записан
uriel
Гость
« Ответ #7 : Январь 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.
Буду копать дальше. Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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