retireSakiの日記

たぶん引退した?ソフトウエアエンジニアのブログ

QFileDialog に関するテクニック (1)

今回はQt(C++)のQFileDialogに関するテクニックです。

使用するOSは、Ubuntu 18.04 LTS, Qt 5.9.5, x86_64-linux-gnu-g++-8 です。

QFileDialogの現時点のバグの1つに、表示されるダイアログがOSのNativeダイアログで表示されないケースがあります。
Qtの標準ダイアログも悪くありませんが、ダイアログサイズが微妙に小さい場合があり、日時の並べ替えが面倒です。
そこで、ダイアログ表示の際にダイアログサイズを指定するテクニックをご紹介します。

 

1.初期表示で表示されるダイアログはこんな感じです。

表示されるダイアログ

f:id:retireSaki:20180922152436j:plain

QFileDialog 初期表示

使用したコード:

QFileDialog dlgfile(this);
dlgfile.setOptions(QFileDialog::ReadOnly|QFileDialog::DontUseNativeDialog);
dlgfile.setWindowTitle(tr("test"));
dlgfile.setDirectory(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
dlgfile.setNameFilter(tr("All (*.*)"));
dlgfile.exec();

 

2.今回は resize() を使って、横幅だけを 820 pixel に拡張してみます。
初期設定系の関数をいくつか試しましたが効果がなく、最終的にたどり着いたのが、resize() でした。

表示されるダイアログ

f:id:retireSaki:20180922152538j:plain

QFileDialog 横幅だけを変更

使用したコード:

QFileDialog dlgfile(this);
dlgfile.setOptions(QFileDialog::ReadOnly|QFileDialog::DontUseNativeDialog);
dlgfile.setWindowTitle(tr("test"));
dlgfile.setDirectory(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
dlgfile.setNameFilter(tr("All (*.*)"));

QSize size=dlgfile.size();
dlgfile.resize(820,size.height());

dlgfile.exec();

 

縦も指定すれば、同じように拡張できます。

QSize size=dlgfile.size();

で、初期表示のダイアログサイズを取得することで、高さを変更させず横幅だけを変更しています。

 

横、縦ともに指定する場合、

dlgfile.resize(820,600);

のように1行だけで炭ます。

 

たったこれだけのことですが、この結論に達するまで結構時間がかかりますよね。
こういったテクニックは。ぼんやりと覚えておくだけでもかなりの時間短縮できます。

 

次回は、さらに QFileDialog を使いやすくするためのテクニックを紹介します。

 

注目記事

「Amazon.co.jpアソシエイト」または「[乙の名称を挿入]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。