Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QDialog错误定位_C++_Qt_Qt5 - Fatal编程技术网

C++ QDialog错误定位

C++ QDialog错误定位,c++,qt,qt5,C++,Qt,Qt5,我们有一个用作主窗口的对话框。它源自QDialog。它有一个固定的大小,是一个全屏窗口 // The form is a member variable. form = new MyMainWindow( nullptr, Qt::Window | Qt::FramelessWindowHint ); 在我们得到这个之后,用户可以访问一些工具菜单,它将弹出另一个对话框。我将表单作为新对话框的父级传递 MyDialog dialog( /*Other parameters*/ this ); /

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

// The form is a member variable.
form = new MyMainWindow( nullptr, Qt::Window | Qt::FramelessWindowHint );
在我们得到这个之后,用户可以访问一些工具菜单,它将弹出另一个对话框。我将表单作为新对话框的父级传递

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。

假设“左”、“右”、“宽”、“高”都属于您的对话框。这将定位小部件并同时调整其大小:

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);

顺便说一下,我输入了它,没有尝试编译,但对我来说类似的工作。

但是子对话框应该出现在其父窗口小部件的中心吗?你能解释一下吗?你注意到有什么规律吗?对话框是否第一次以父对象为中心而不是第二次以父对象为中心弹出?或者它只是看似随机的?当它不居中时,它出现在什么位置?它不应该居中。您需要手动设置顶级小部件的位置。我发现了一件事。我们有一个用于演示的对话框,当它可用时,则定位错误。但当它关闭时,定位更好。但我认为它仍然不完美,因为顶部和底部的边距不一样。为什么我要手动定位它?如果我创建一个QDialog并将一个父QWidget传递给,那么该对话框应该位于该widget的中心,或者不是@SaZ?不幸的是,这无助于解决y坐标的问题。同时我发现了,但也不好。