QFileDialog に関するテクニック (2)
QFileDialog に関するテクニック (2)
今回はQt(C++)のQFileDialogに関するテクニック(2) です。
使用するOSは、Ubuntu 18.04 LTS, Qt 5.9.5, x86_64-linux-gnu-g++-8 です。
前回、Qtの標準ダイアログのサイズを拡張する方法を紹介しましたが、今回はヘッダー情報も保存・再現させるテクニックをご紹介します。
1.前回のコードで表示されるダイアログはこんな感じです。
表示されるダイアログ
使用したコード:
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();
2.今回は saveState(), restoreState() を使って、ユーザーが最終的に設定した状態を再現します。
つまり、ヘッダーの幅・各カラムの幅・カラムのソート状態を再現させることができますので、前回のテクニックと合わせることで、ほぼ完璧と言えるでしょう。
表示されるダイアログ
使用したコード:
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());
QSettings settings(QSettings::UserScope,"test","test");
settings.beginGroup("filedialog");
QByteArray dlgstate=settings.value("state").toByteArray();
settings.endGroup();
dlgfile.restoreState(dlgstate);
dlgfile.exec();
settings.beginGroup("filedialog");
settings.setValue("state",dlgfile.saveState());
settings.endGroup();
今回は、超かんたんに使える QSettings を使っています。
本来、サイドバーのアイコンをオリジナルに変更したいところです。
これを触るとなると、QFileIconProviderを実装し、これがとてつもなく厄介者なので諦めました(笑)
たったこれだけの変更でも、Qtのファイルダイアログでもかなり使いやすくなりますね。