9

我对一个简单的程序有疑问。我以这种方式打开 QFileDialog :

QFileDialog fileDialog(this);
fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
if (!fileDialog.exec())
return;

但是,它显示了一个 Qt 对话框,而不是本机 Windows 对话框。我使用的是 Windows 7 x64,我真的更喜欢原生对话框而不是 Qt 对话框,因为它有点花哨。但是我读过,我发现这可以通过使用来改变:

fileDialog.setOption(QFileDialog::DontUseNativeDialog, false);

事实是我没有得到本机 Windows 对话框,而是 Qt 对话框,所以该选项不起作用......任何人都知道如何在不使用静态成员的情况下解决这个问题?

我真的不想使用静态成员,因为它们存在某种内存泄漏问题或其他问题,因为如果您使用静态成员反复打开新对话框,则程序使用的内存会增加和增加,但是,使用先前存储的对话框用指针就没有这个问题。

所以,如果有人对这两个问题(本机对话和内存泄漏问题)都有答案,请告诉我。

谢谢。

4

2 回答 2

6

本机对话框不支持QFileDialog该类公开的全部功能。getOpenFileName()这就是为什么它们只能通过名为等的静态快捷功能获得getSaveFileName()。如果您正在使用这些功能并且仍然不想看到本机对话框,则使用该DontUseNativeDialog标志。

于 2011-06-19T21:42:23.093 回答
0

你确定这样的孩子是造出来的吗?因为如果是这样,我会假设你可以做类似的事情

QString path = QFileDialog::getExistingDirectory(this, ...);

QFileDialog *filedialog = this->findChild<QFileDialog*>();
if (filedialog) {
    filedialog->deleteLater();
}

但是我尝试使用this作为父级创建对话框并调用对象以及使用作为父级创建对话框并findChild在主窗口中调用;两者都无济于事。this0findChild

于 2012-02-03T12:19:46.957 回答