9

単純なプログラムに問題があります。私はこの方法でQFileDialogを開いています:

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

ただし、ネイティブのWindowsダイアログの代わりにQtダイアログが表示されます。私はWindows7x64を使用していますが、Qtダイアログではなく、ネイティブダイアログの方が少し凝っているので、実際に好みます。しかし、私は読んだことがあり、これは以下を使用して変更できることがわかりました。

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

実際には、ネイティブのWindowsダイアログではなくQtダイアログが表示されているため、オプションが機能していません...静的メンバーを使用せずにこの問題を解決する方法を知っている人はいますか?

静的メンバーを使用すると、メモリリークの問題などが発生するため、静的メンバーを使用したくありません。静的メンバーを使用して新しいダイアログを繰り返し開くと、プログラムで使用されるメモリが増減しますが、以前に保存されたダイアログを使用するためです。ポインタを使用しても、この問題は発生しません。

したがって、誰かがこれについて答えを持っている場合(ネイティブダイアログとメモリリークの問題)、plzは私に教えてくれます。

ありがとう。

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 に答える