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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получаю неверный размер виджета, не могу получить правильный  (Прочитано 6531 раз)
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.173 секунд. Запросов: 23.