getOpenFileNames 对话框未以主窗口为中心

发布于 2024-09-15 09:13:12 字数 441 浏览 5 评论 0原文

为什么打开的对话框不以主窗口为中心?

void MainWindow::on_FileOpenAction_triggered()
{
    QStringList fileNames = QFileDialog::getOpenFileNames(
        this, 
        "Open Image",
        QApplication::applicationDirPath(), 
        "Images (*.jpg);;All Files (*.*)"
    );
}

该文档说这应该有效:

此函数使用给定的父窗口小部件创建模式文件对话框。如果parent不为0,对话框将显示在父窗口部件的中心。

我在 Windows XP SP2 上使用 QT 4.6.3。

Why the opened dialog is not centered to the main window?

void MainWindow::on_FileOpenAction_triggered()
{
    QStringList fileNames = QFileDialog::getOpenFileNames(
        this, 
        "Open Image",
        QApplication::applicationDirPath(), 
        "Images (*.jpg);;All Files (*.*)"
    );
}

The documentation says that is should work:

This function creates a modal file dialog with the given parent widget. If parent is not 0, the dialog will be shown centered over the parent widget.

I use QT 4.6.3 on Windows XP SP2.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ペ泪落弦音 2024-09-22 09:13:13

文档中还包含以下内容:

在 Windows 上,对话框将旋转一个阻塞模式事件循环,该循环不会调度任何 QTimers,如果父级不为 0,则它将将该对话框定位在父级标题栏的正下方。

这是正在发生的事情吗?如果没有,我猜你已经发现了 Qt 中的一个错误。

Also in the documentation is the following:

On Windows the dialog will spin a blocking modal event loop that will not dispatch any QTimers, and if parent is not 0 then it will position the dialog just below the parent's title bar.

Is this what is happening? If not, I would guess that you've found a bug in Qt.

昵称有卵用 2024-09-22 09:13:13

Qt 中存在错误或文档中存在错误。
如果您想要一个居中的对话框,请避免使用静态函数并以这种方式创建对话框:

QFileDialog dialog(
    this, 
    "Open Image",
    QApplication::applicationDirPath(),
    "Images (*.jpg);;All Files (*.*)");
dialog.setFileMode(QFileDialog::ExistingFiles);
QStringList fileNames;
if (dialog.exec())
    fileNames = dialog.selectedFiles();

请注意,这使用 Qt 的文件对话框而不是本机文件对话框。

There is either a bug in the Qt or an error in the documentation.
If you want a centered dialog, avoid the static functions and create dialog this way:

QFileDialog dialog(
    this, 
    "Open Image",
    QApplication::applicationDirPath(),
    "Images (*.jpg);;All Files (*.*)");
dialog.setFileMode(QFileDialog::ExistingFiles);
QStringList fileNames;
if (dialog.exec())
    fileNames = dialog.selectedFiles();

Note that this uses the Qt's file dialog and not the native file dialog.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文