QDialog定位错误

时间:2015-05-18 09:07:35

标签: c++ qt qt5

我们有一个用作主窗口的对话框。它源自QDialog。它有一个固定的大小,它是一个全屏窗口。

// The form is a member variable.
form = new MyMainWindow( nullptr, Qt::Window | Qt::FramelessWindowHint );

在我们得到这个之后,用户可以访问一些工具菜单,这将弹出另一个对话框。我将form作为此新对话框的父级传递。

MyDialog dialog( /*Other parameters*/ this ); // Called from MyMainWindow.
dialog.setWindowIcon( QIcon( "MyIcon" ) );
dialog.resize( 1300, 1100 );
dialog.exec();

MyDialog类的构造函数中,我将父窗口小部件传递给基类。

MyDialog::MyDialog( /**/ QWidget* aParent )
: QDialog( aParent, 0 )
{
}

但有时对话框不在主窗口的中心。可能是什么问题?

我们使用Windows 7,Visual Studio 2012,Qt 5.4.0。

1 个答案:

答案 0 :(得分:0)

假设'left','right','width','height'都属于你的对话框。这将定位窗口小部件并同时调整大小:

dialog.setGeometry( top, left, width, height );

假设'this'指向对话框,或者您可以使用指向该对话框的其他指针。只要您说主窗口是窗口小部件(您将其作为父窗口传递给对话框)就会占据整个屏幕,如果您想尝试将对话框放在父窗口中:

QRect r = qobject_cast<QWidget*>(this->parent())->geometry();
this->setGeometry(
   (r.width() - width) / 2, (r.height() - height) / 2
   width, height);

P.S。我输入并且没有尝试编译,但类似的工作对我来说。