crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Автоматический пересчет размеров формы
KuvshinoF
  опции профиля:
сообщение 7.5.2018, 22:01
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 25.7.2013
Пользователь №: 3887

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть класс-наследник от MyDialog (наследник от QDialog) с QLabel-ом, в который выводится заданный текст (произвольной ширины). Мне нужно вывести этот диалог ТОЧНО ПО ЦЕНТРУ его родителя (размеры родителя передаются параметром ParentGeometry). Проблема в том, что при ПЕРВОМ отображении этой формы (setGeometry в showEvent) ее размеры неверны (в width() и height() хранятся предыдущие размеры этой формы)...проблема решается двойным вызовом hide(), show() этой формы, но хотелось бы сделать покрасивее...так как ширина формы должна подстраиваться под ширину текста, то для формы стоит layoutSizeConstraint=FixedSize...(кстати выводимый текст может быть многострочным и разноширинным, поэтому принудительно задавать setFixedSize для формы перед ее отображением затруднительно)
 class MyClass: public  MyDialog ….
//-------------------------------------------------------------------------------------
void MyClass::Message(QRect &ParentGeometry,  QString &text)
{
  ui->LabelText->setText(text);
  this->setParentGeometry(ParentGeometry);
  this->show();
}
//-------------------------------------------------------------------------------------
class MyDialog: public QDialog ….
//-------------------------------------------------------------------------------------
void MyDialog::setParentGeometry(QRect &Geometry)
{
  ParentGeometry = Geometry;
}
//------------------------------------------------------------------------------------
void MyDialog::showEvent(QShowEvent *)
{
setGeometry(ParentGeometry.x() + 0.5*(ParentGeometry.width() - this-    
>width()), ParentGeometry.y() + 0.5*(ParentGeometry.height() - this->height()),this->width(),this->height());
}
//-------------------------------------------------------------------------------------
MyClass objMyClass;
Button1_Onclick:
objMyClass. Message(QRect(0,0,1280,1024), trUtf8(«hello»));  // вариант 1

после закрытия формы варианта 1
Button2_Onclick:
objMyClass. Message(QRect(0,0,1280,1024), trUtf8(«hello everybody from me»)); // вариант 2
форма отобразится смещенной (так как ее размеры будут еще пока из варианта 1, при последующих вызовах варианта 2 все будет как надо)






Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.6.2018, 7:42
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9646
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


когда ты диалогу задаёшь parent он автоматически по центру parent-а появляется
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.9.2018, 20:34