c++ - 如何在 QT 中将 QDialog 居中?

标签 c++ qt qmainwindow qdialog

我有这个示例代码:

QDialog *dialog = new QDialog(this);
QPoint dialogPos = dialog->mapToGlobal(dialog->pos());
QPoint thisPos = mapToGlobal(this->pos());
dialog->exec();

但是Dialog并不以他的parent为中心。提前致谢。

更新:

我在 MainWindow 的构造函数中调用 Dialog:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    this->panelInferior = new WidgetTabsInferior;
    this->acciones = new Acciones(this);

    crearAcciones();
    crearBarraMenu();
    crearToolbar();
    crearTabsEditor();
    crearArbolDir();
    crearDockWindows();
    crearStatusBar();

    setWindowIcon(QIcon(":imgs/logo.png"));

    connect(this->pestanasEditor , SIGNAL(currentChanged(int)),this,SLOT(cambioTab(int)));

    this->dialogo = new AcercaDe(this);
    this->dialogo->move(x() + (width() - dialogo->width()) / 2,
                 y() + (height() - dialogo->height()) / 2);
    this->dialogo->show();
    this->dialogo->raise();
    this->dialogo->activateWindow();

}

但我得到的是:

enter image description here

最佳答案

我在 github 中有这段代码

inline void CenterWidgets(QWidget *widget, QWidget *host = 0) {
    if (!host)
        host = widget->parentWidget();

    if (host) {
        auto hostRect = host->geometry();
        widget->move(hostRect.center() - widget->rect().center());
    }
    else {
        QRect screenGeometry = QApplication::desktop()->screenGeometry();
        int x = (screenGeometry.width() - widget->width()) / 2;
        int y = (screenGeometry.height() - widget->height()) / 2;
        widget->move(x, y);
    }
}

希望对你有帮助

编辑

修复最近 Qt 版本发出的弃用警告:

#include <QScreen>
#include <QWidget>
#include <QGuiApplication>

inline void CenterWidgets(QWidget *widget, QWidget *host = Q_NULLPTR) {
    if (!host)
        host = widget->parentWidget();

    if (host) {
        auto hostRect = host->geometry();
        widget->move(hostRect.center() - widget->rect().center());
    }
    else {
        QRect screenGeometry = QGuiApplication::screens()[0]->geometry();
        int x = (screenGeometry.width() - widget->width()) / 2;
        int y = (screenGeometry.height() - widget->height()) / 2;
        widget->move(x, y);
    }
}

关于c++ - 如何在 QT 中将 QDialog 居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42324399/

相关文章:

c++ - 在哪里告诉 Qt Creator 搜索头文件以进行自动完成

c++ - Qt向QMainWindow添加menuBar、菜单和子菜单

python - 如何从 QMainWindow 在 QGraphicsView 上绘图

c++ - CString 到 Float 转换

c++ - 带有错误位置的编译器运行时错误报告

c++ - 如何从 GetLastError() 返回的错误码中获取错误信息?

c++ - 具有 SDL2 问题的 Visual Studio 代码

python - 可插入的Python程序

python - QFileSystemWatcher 不为另一个应用程序所做的更改发出 fileChanged 信号

c++ - 如何从另一个类(class)关闭主窗口?