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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Дефолтовые размеры MainWindow ограничиваются 860x710  (Прочитано 3708 раз)
Eugene Efremov
Гость
« : Ноябрь 27, 2008, 04:43 »

Собственно, subj. Если задать в sizeHint достаточно большие значения, окно упирается в размер 860x710 (что существенно меньше размера экрана) и дальше расти не желает.

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

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

P.S. w2k3, Qt 4.4.1.
Записан
Rcus
Гость
« Ответ #1 : Ноябрь 27, 2008, 05:49 »

А если выставить QSizePolicy::Expanding то еще и уменьшать окно можно будет
(QSizePolicy::MinimumExpanding   == GrowFlag | ExpandFlag,
 QSizePolicy::Expanding == GrowFlag | ShrinkFlag | ExpandFlag).
только вот одного не пойму, как для виджета можно выставить sizeHint напрямую.
Записан
Eugene Efremov
Гость
« Ответ #2 : Ноябрь 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 оно от этого не становится...
Записан
Eugene Efremov
Гость
« Ответ #3 : Ноябрь 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 (думаю, способы борьбы с багами интересны не только начинающим)...
Записан
Rcus
Гость
« Ответ #4 : Ноябрь 27, 2008, 21:34 »

проверил, если после show() поставить второй qDebug и поставить sizeHint(1600,1250) то выводит
Цитировать
x=640,y=480
x=1120,y=700
1120/1680 == 700/1050 == 2/3
Записан
Eugene Efremov
Гость
« Ответ #5 : Ноябрь 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 от размера экрана.

(риторический вопрос) Ну и что с этим делать?
Записан
Rcus
Гость
« Ответ #6 : Ноябрь 27, 2008, 22:24 »

/*shrugs*/
можно в конструкторе формы напрямую указать координаты и размер через setGeometry, а параметры рассчитать на основе QDesktopWidget::availableGeometry
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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