Есть класс-наследник от 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
когда ты диалогу задаёшь parent он автоматически по центру parent-а появляется
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)