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

问题描述 投票:0回答:3

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

class MyDialog : public QDialog
{
    MyDialog::MyDialog(QWidget *parent) :
        QDialog(parent)
    {
        setGeometry(geometry().x(), geometry().y(), 200, 400);
    }
}
qt qdialog
3个回答
7
投票

我有更好的解决方案:

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

6
投票

我想扩展您的解决方案,使其也可以在具有第二个显示器的系统上工作(即使这是旧线程......):

...
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
...

马塞尔


6
投票

resize 一起使用而不是 setGeometry,它应该按您的预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.