Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Normann от Январь 04, 2011, 12:36



Название: Получаю неверный размер виджета, не могу получить правильный
Отправлено: Normann от Январь 04, 2011, 12:36
Ситуация следующая: функции width(), height(), size() выдают недействительный размер виджета. Создаю класс виджета (наследую от QWidget). В конструкторе пишу код в роде этого:
Код:
//Есть QWidget, есть QVBoxLayout и дочерние виджеты в нем
QWidget::QWidget(...)
{
...
layout->addWidget(...);
layout->addWidget(...);
layout->addWidget(...);

this->setLayout(layout);
...
//после чего необходимо извлечь размеры родительского виджета (this)
lineEdit->setText(QString("%1\t%2").arg(this->width()).arg(this->height()));
...
}

В результате lineEdit выдает "640   480", но реальный размер виджета намного меньше. Где же взять реальные размеры, и почему результаты вушеуказанных функций выдают недействительные?


Название: Re: Получаю неверный размер виджета, не могу получить правильный
Отправлено: alexman от Январь 04, 2011, 12:49
Делай после show().


Название: Re: Получаю неверный размер виджета, не могу получить правильный
Отправлено: Normann от Январь 04, 2011, 12:51
Делай после show().
Не могу, моя задача получить размеры виджета до того как он появится на экране, на пример для предварительного отцентрирования.


Название: Re: Получаю неверный размер виджета, не могу получить правильный
Отправлено: pastor от Январь 04, 2011, 14:03
Цитировать
Не могу, моя задача получить размеры виджета до того как он появится на экране

Как уже сказал alexman, размеры виджета ты можешь получить только после show event


Название: Re: Получаю неверный размер виджета, не могу получить правильный
Отправлено: hordi1 от Январь 04, 2011, 14:11
Можешь попробовать показать вне пределов экрана, затем обработать все размеры и переместить куда нужно.


Название: Re: Получаю неверный размер виджета, не могу получить правильный
Отправлено: Normann от Январь 04, 2011, 14:18
А есть в Qt что нибудь специальное для предварительного центрирования виджета на экране? Я привык использовать размеры раб.стола / 2 + размеры виджета / 2


Название: Re: Получаю неверный размер виджета, не могу получить правильный
Отправлено: hordi1 от Январь 04, 2011, 14:38
Стандартного ничего нет, я использую или QDesktopWidget (для центрирования на экране) или главный виджет (для центрирования относительно своей аппликухи).


Название: Re: Получаю неверный размер виджета, не могу получить правильный
Отправлено: SABROG от Январь 04, 2011, 14:42
Попробуй заставить компановщик пересчитать геометрию виджета "за кадром" таким образом
Код
C++ (Qt)
Widget::Widget(QWidget *parent) :
   QWidget(parent),
   ui(new Ui::Widget)
{
   ui->setupUi(this);
   QLayout* wlayout = layout();
   if (wlayout)
       layout()->activate();
   qDebug() << Q_FUNC_INFO << geometry();
}
 

Я обычно центрирую главное окно таким образом:

Код
C++ (Qt)
void Widget::moveToCenter()
{
   move(qApp->desktop()->availableGeometry(this).center()-rect().center());
 
}
 


Название: Re: Получаю неверный размер виджета, не могу получить правильный
Отправлено: Normann от Январь 08, 2011, 18:32
Ничего из этого не помогает. Нашел решение - либо в конструкторе задать размеры виджету самостоятельно, а потом по этим размерам центрировать, либо перегрузить showEvent() и там центрировать.


Название: Re: Получаю неверный размер виджета, не могу получить правильный
Отправлено: SASA от Январь 10, 2011, 14:39
Можно посмотреть в коде КуТе как центрируются модальные диалоги.