Qt 如何设置QDialog的宽度和高度以及允许自动放置窗口

Qt 如何设置QDialog的宽度和高度以及允许自动放置窗口,qt,qdialog,Qt,Qdialog,有没有一种方法可以在不使用ui文件的情况下初始化QDialog的宽度和高度,而不更改x和y坐标?我只是有一个简单的QDialog,只想设置宽度和高度,并将x和y自动设置为父对象的中心,但当我尝试设置几何体时,继承的几何体的x和y为0。使用ui文件创建对话框时,如何设置x和y class MyDialog : public QDialog { MyDialog::MyDialog(QWidget *parent) : QDialog(parent) {

有没有一种方法可以在不使用ui文件的情况下初始化QDialog的宽度和高度,而不更改x和y坐标?我只是有一个简单的QDialog,只想设置宽度和高度,并将x和y自动设置为父对象的中心,但当我尝试设置几何体时,继承的几何体的x和y为0。使用ui文件创建对话框时,如何设置x和y

class MyDialog : public QDialog
{
    MyDialog::MyDialog(QWidget *parent) :
        QDialog(parent)
    {
        setGeometry(geometry().x(), geometry().y(), 200, 400);
    }
}

与一起使用而不是使用setGeometry,它应该可以按预期工作

我有更好的解决方案:

class MyDialog : public QDialog
{
    MyDialog::MyDialog(QWidget *parent) :
        QDialog(parent)
    {
        int nWidth = 300;
        int nHeight = 400;
        if (parent != NULL)
            setGeometry(parent->x() + parent->width()/2 - nWidth/2,
                parent->y() + parent->height()/2 - nHeight/2,
                nWidth, nHeight);
        else
            resize(nWidth, nHeight);
    }
}

我想将您的解决方案扩展到使用第二个监视器的系统上(即使这是一个旧线程…):


Marcel

尝试使用resize而不是setGeometry,resize应该可以像您预期的那样工作:好的,这种方式可以工作,但是x和y没有基于新的宽度和高度居中。对,但是对话框现在看起来好像打开了,有人调整了它的大小。如果它是使用ui设计器创建的,则它不会居中
...
if (parent != NULL)
    QPoint parentPos = parent->mapToGlobal(parent->pos());
    setGeometry(parentPos.x() + parent->width()/2 - nWidth/2,
                parentPos.y() + parent->height()/2 - nHeight/2,
                nWidth, nHeight);
else
...