Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Eugene Efremov от Ноябрь 27, 2008, 04:43



Название: Дефолтовые размеры MainWindow ограничиваются 860x710
Отправлено: Eugene Efremov от Ноябрь 27, 2008, 04:43
Собственно, subj. Если задать в sizeHint достаточно большие значения, окно упирается в размер 860x710 (что существенно меньше размера экрана) и дальше расти не желает.

Вызов resize позволяет увеличить окно за пределы этих значений, равно как и манипуляции мышкой в процессе работы программы. Установка QSizePolicy::MinimumExpanding также заставляет ее превысить этот предел, но при этом заданный размер вообще нельзя уменьшить — что тоже не годится.

Вопрос. Как ей объяснить, что покуда место на экране есть — надо по умолчанию рисовать окно таких размеров, какие указаны в sizeHint?

P.S. w2k3, Qt 4.4.1.


Название: Re: Дефолтовые размеры MainWindow ограничиваются 860x710
Отправлено: Rcus от Ноябрь 27, 2008, 05:49
А если выставить QSizePolicy::Expanding то еще и уменьшать окно можно будет
(QSizePolicy::MinimumExpanding   == GrowFlag | ExpandFlag,
 QSizePolicy::Expanding == GrowFlag | ShrinkFlag | ExpandFlag).
только вот одного не пойму, как для виджета можно выставить sizeHint напрямую.


Название: Re: Дефолтовые размеры MainWindow ограничиваются 860x710
Отправлено: Eugene Efremov от Ноябрь 27, 2008, 14:20
А если выставить QSizePolicy::Expanding то еще и уменьшать окно можно будет
(QSizePolicy::MinimumExpanding   == GrowFlag | ExpandFlag,
 QSizePolicy::Expanding == GrowFlag | ShrinkFlag | ExpandFlag).

QSizePolicy::Expanding пробовал, не помогает. Т.е. — по прежнему 860x710, а больше — только ручками.

только вот одного не пойму, как для виджета можно выставить sizeHint напрямую.

???
Переопределяя соотв. ф-цию, конечно:

Код
C++ (Qt)
virtual QSize sizeHint() const
{
return QSize(1000,750);
}
 

Вот только проблема в том, что 1000х750 оно от этого не становится...


Название: Re: Дефолтовые размеры MainWindow ограничиваются 860x710
Отправлено: Eugene Efremov от Ноябрь 27, 2008, 18:00
Значит так. Вот тестовый код.

testsize.h:
Код
C++ (Qt)
#ifndef TESTSIZE_H
#define TESTSIZE_H
#include<QtGui>
 
class TestMain : public QMainWindow
{
Q_OBJECT
 
public:
TestMain() : QMainWindow(0)
{}
 
virtual QSize sizeHint() const
{
return QSize(1000,750);
}
};
#endif
 

testsize.cpp:
Код
C++ (Qt)
#include<QtGui>
#include "testsize.h"
 
int main(int argc, char **argv)
{
QApplication app(argc, argv);
TestMain tst;
//tst.resize(tst.sizeHint()); // hack
 
qDebug()<<"x = "<<tst.width()<<", y = "<<tst.height();
 
tst.show();
return app.exec();
}
 

Это рисует окно размером 860x710 и выводит в консоль такое вот сообщение: «x =  640,  y =  480». :(
Если раскомментировать строчку, помеченную как хак, все работает нормально — сообщение «x =  1000,  y = 750» и размеры окна примерно 1010х780 (за счет полей/заголовка). Но я не уверен, что подобный хак приемлем и не вызовет других проблем.
И вообще все это очень похоже на баг Qt.

А посему. Просьба всем, кто это читает, откомпилировать данный код на других (отличных от 4.4.1) версиях Qt, дабы проверить, не изменится ли сие поведение.

P.S. (админам форума): Если я прав, и это действительно баг Qt, тему, наверное, лучше перенести из новичкового форума в раздел GUI (думаю, способы борьбы с багами интересны не только начинающим)...


Название: Re: Дефолтовые размеры MainWindow ограничиваются 860x710
Отправлено: Rcus от Ноябрь 27, 2008, 21:34
проверил, если после show() поставить второй qDebug и поставить sizeHint(1600,1250) то выводит
Цитировать
x=640,y=480
x=1120,y=700
1120/1680 == 700/1050 == 2/3


Название: Re: Дефолтовые размеры MainWindow ограничиваются 860x710
Отправлено: Eugene Efremov от Ноябрь 27, 2008, 22:01
проверил, если после show() поставить второй qDebug и поставить sizeHint(1600,1250) то выводит
Цитировать
x=640,y=480
x=1120,y=700
1120/1680 == 700/1050 == 2/3

Так... У меня после show выводит «x =  853 , y =  682». Изменение sizeHint, если там стоит больше этой величины, роли не играет.
Разрешение экрана — 1280х1024. Таки действительно — 2/3 от размера экрана.

(риторический вопрос) Ну и что с этим делать?


Название: Re: Дефолтовые размеры MainWindow ограничиваются 860x710
Отправлено: Rcus от Ноябрь 27, 2008, 22:24
/*shrugs*/
можно в конструкторе формы напрямую указать координаты и размер через setGeometry, а параметры рассчитать на основе QDesktopWidget::availableGeometry