Qt getOpenFileNames对话框未居中于主窗口

Qt getOpenFileNames对话框未居中于主窗口,qt,qt4,centering,fileopendialog,opendialog,Qt,Qt4,Centering,Fileopendialog,Opendialog,为什么打开的对话框未居中于主窗口 void MainWindow::on_FileOpenAction_triggered() { QStringList fileNames = QFileDialog::getOpenFileNames( this, "Open Image", QApplication::applicationDirPath(), "Images (*.jpg);;All Files (*.*)"

为什么打开的对话框未居中于主窗口

void MainWindow::on_FileOpenAction_triggered()
{
    QStringList fileNames = QFileDialog::getOpenFileNames(
        this, 
        "Open Image",
        QApplication::applicationDirPath(), 
        "Images (*.jpg);;All Files (*.*)"
    );
}
文件中说,这应该是可行的:

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

我在Windows XP SP2上使用QT 4.6.3。

中还包括以下内容:

在Windows上,该对话框将旋转一个阻止模式事件循环,该循环不会分派任何QTIMER,如果父对象不是0,则将对话框定位在父对象标题栏的正下方

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

同样在中的是以下内容:

在Windows上,该对话框将旋转一个阻止模式事件循环,该循环不会分派任何QTIMER,如果父对象不是0,则将对话框定位在父对象标题栏的正下方


这就是正在发生的事情吗?如果没有,我猜您在Qt中发现了一个bug。

Qt中要么有bug,要么文档中有错误。 如果需要居中对话框,请避免使用静态函数,并按以下方式创建对话框:

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

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

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的文件对话框,而不是本机文件对话框。

这正是发生的情况。有没有办法避免呢。我想我应该尝试构建对话框,而不是使用hendy helper getOpenFileNames()例程。@Gad D Lord:我所知道的唯一方法就是跳过helper例程,自己定位对话框。这正是正在发生的事情。有没有办法避免呢。我想我应该尝试构造对话框,而不是使用hendy helper getOpenFileNames()例程。@Gad D Lord:我知道的唯一方法是跳过helper例程,自己定位对话框。我想以本机为中心的解决方案没有选择。任何方式都比这篇文章好。我想没有以本机为中心的解决方案。无论如何,他都不适合这个职位。