Russian Qt Forum
Февраля 23, 2025, 15:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получаю неверный размер виджета, не могу получить правильный  (Прочитано 6644 раз)
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", но реальный размер виджета намного меньше. Где же взять реальные размеры, и почему результаты вушеуказанных функций выдают недействительные?
Записан
alexman
Гость
« Ответ #1 : Января 04, 2011, 12:49 »

Делай после show().
Записан
Normann
Гость
« Ответ #2 : Января 04, 2011, 12:51 »

Делай после show().
Не могу, моя задача получить размеры виджета до того как он появится на экране, на пример для предварительного отцентрирования.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Января 04, 2011, 14:03 »

Цитировать
Не могу, моя задача получить размеры виджета до того как он появится на экране

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
hordi1
Гость
« Ответ #4 : Января 04, 2011, 14:11 »

Можешь попробовать показать вне пределов экрана, затем обработать все размеры и переместить куда нужно.
Записан
Normann
Гость
« Ответ #5 : Января 04, 2011, 14:18 »

А есть в Qt что нибудь специальное для предварительного центрирования виджета на экране? Я привык использовать размеры раб.стола / 2 + размеры виджета / 2
Записан
hordi1
Гость
« Ответ #6 : Января 04, 2011, 14:38 »

Стандартного ничего нет, я использую или QDesktopWidget (для центрирования на экране) или главный виджет (для центрирования относительно своей аппликухи).
Записан
SABROG
Гость
« Ответ #7 : Января 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());
 
}
 
Записан
Normann
Гость
« Ответ #8 : Января 08, 2011, 18:32 »

Ничего из этого не помогает. Нашел решение - либо в конструкторе задать размеры виджету самостоятельно, а потом по этим размерам центрировать, либо перегрузить showEvent() и там центрировать.
Записан
SASA
Гость
« Ответ #9 : Января 10, 2011, 14:39 »

Можно посмотреть в коде КуТе как центрируются модальные диалоги.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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