ここにアイデアがあります:私はセクションごとにグループ化されたパラメータのリスト(名前、型、値、多分何か、入力用の正規表現)を持っています。それらはxmlファイルに格納されています(たとえば、おそらく他の形式)。私はこのファイルに依存する "標準的な"設定ダイアログを構築するモジュールを作りたいと思っています。このように セクション名はリストとして左側に、選択されたセクションにはパラメータが右側に表示されていなければなりません:名前はラベルの一部であり、入力フィールドの値はパラメータのタイプに依存します(テキストの場合はlineEdit 、spinEdit - 数字の場合は、checkBox - ブール値の場合など) 最後に質問:私の目的のために "ready-for-use"ダイアログがありますか? ありがとうございます。設定のダイアログを使用する準備ができましたか?
答えて
私はしばらくの間検索しましたが、何の決定もありませんでした。だから私はそれを自分で書くことに決めました。 ここで少し説明です:
1メインコンセプト
あなたのプログラムは、あなたが、あなただけの、適切な形式のXMLファイルを記述したクラスのインスタンスを作成する必要がありますGUIから編集可能にすることを、いくつかのパラメータを持っている場合クラスコンフィグ
の最後にコンフィグ、コールスロットコンフィグ::ショー()とConfigを介して、必要なパラメータを求める::(取得)
2使用あなたはどこでもあなたが望むそれを作成することができます。 c-torまたはConfig :: load()メソッドの中でxmlファイル名/パスを指定することができます。 Config :: get()メソッドを呼び出すことによって、プログラムの任意の場所にある任意のパラメータを得ることができます。 クラスコンフィグの使用方法の例:
Config config("full/path/to/settings.xml");
connect(settingsAction, SIGNAL(trigger()), &config, SLOT(show()));
...
if (config.get("section_name", "param_name").toBool()) {
...
}
QFile file(config.get("section_name", "directory_for_log").toString() +
"/prog.log");
3制限
ConfigがQtCore、QtGuiとQtXmlを必要としています。 C++ 11の機能を使用します。
4 XML-ファイル形式
申し訳ありませんが、私は完全な説明を記述するのが面倒だけど、私は、すべての機能を備えた完全な例を記述します。私は
std::ostream & operator<< (std::ostream & os, const QVariant & var) {
if (var.type() == QVariant::Bool) {
os << var.toBool();
}
else if (var.type() == QVariant::Int) {
os << var.toInt();
}
else if (var.type() == QVariant::String) {
os << qPrintable(var.toString());
}
return os; }
cout << "First group checked : " << cfg.get("First section name", "First group") << endl;
cout << "Ip address:port : " << cfg.get("First section name", "Ip address:port") << endl;
cout << "Some bool value : " << cfg.get("First section name", "Some bool value") << endl;
cout << "Choose 1 : " << cfg.get("First section name", "Choose 1") << endl;
cout << "Picture or sound : " << cfg.get("First section name", "Picture or sound") << endl;
cout << "Choose 2 : " << cfg.get("First section name", "Choose 2") << endl;
cout << "Dir for log : " << cfg.get("First section name", "Dir for log") << endl;
cout << "Length : " << cfg.get("First section name", "Length") << endl;
cout << "Weight : " << cfg.get("First section name", "Weight") << endl;
cout << "Just bool : " << cfg.get("First section name", "Just bool") << endl;
cout << "Greet me : " << cfg.get("Second sect", "Greet me") << endl;
cout << "Invisible bool : " << cfg.get("Second sect", "Invisible bool") << endl;
このファイルに絵が
であり、ここでコンフィグの使用であるあなたが、ここでそれらをすべて:)
<?xml version="1.0" encoding="System"?>
<config>
<section visible="true" name="First section name">
<group visible="true" checkable="true" checked="true" name="First group">
<value visible="true" type="text" value="192.168.1.1:1234" regexp="ip-addr:port" name="Ip address:port"/>
<value visible="true" type="bool" value="false" name="Some bool value"/>
<value visible="true" type="combo" value="Just three" items="The one;The two;Just three" name="Choose 1"/>
<value visible="true" type="file" value="/etc/some/file.jpg" name="Picture or sound" filters="Images (*.png *.jpg);;Sounds (*.mp3 *.wav)"/>
<value visible="true" type="radio" value="Fourth" items="First;Second;Third;Fourth" name="Choose 2"/>
<value visible="true" type="dir" value="/etc" name="Dir for log"/>
</group>
<group visible="true" checkable="false" checked="true" name="Second group">
<value unit=" cm" visible="true" type="int" value="18" min="1" name="Length" max="33"/>
<value unit=" kg" visible="true" type="int" value="42" min="0" name="Weight" max="100"/>
</group>
<value visible="true" type="bool" value="true" name="Just bool"/>
</section>
<section visible="true" name="Second sect">
<value visible="true" type="text" value="hello" regexp="(hello)+" name="Greet me"/>
<value visible="false" type="bool" value="true" name="Invisible bool"/>
</section>
</config>
を理解するだろうと、考え、最終的には、することができますソースコードを公開する最善の方法を教えてください。 ありがとうございます。
UPD:あなたは短い答えはノーである、ここでhttps://sourceforge.net/projects/guisettings/
このようなダイアログはありません。
"フル"ダイアログを手動で作成し、特定のケースで使用されていない要素を無効/非表示にする方法はありますか?
- 1. 準備ができた設定バンドルを入手できますか?
- 2. トリガーなどを使用してドキュメントの準備をする準備ができていますか?
- 3. FileSystemWatcher - ファイルを使用する準備ができています
- 4. サブクエリを使用したPDOの準備
- 5. Clojure do-templateを使用して準備済み文の列を設定する
- 6. segueまたはinitの準備を使ってNSComboBoxを設定するには?
- 7. Javascriptコードを作成する準備ができました
- 8. アプリケーションの準備が整った後、アプリケーションコントローラのコントローラプロパティを設定します。
- 9. ログバックの準備ができましたか?
- 10. 準備済みステートメントを使用してLONGデータ型を設定する
- 11. 100%オフラインアプリのための準備ができていますか?
- 12. 準備された文を使用したSELECTクエリとユーザーから取得した値の設定
- 13. キッチンコンバージドで準備ができています。クライアント.rbを準備中
- 14. Javaを使用したSybaseクエリの準備ができていない文
- 15. 準備中のPDO設定値
- 16. java.io.IOException:準備ができませんでした:ステータス= 0x1、Androidで
- 17. .Net @ VS.でMySQLを使用してステートメントを準備しましたか?
- 18. Mysqliの準備、実行、ロールバックを併用できますか?
- 19. テストのためにtf.argmaxを使用できるトレーニングデータを準備する
- 20. * ngIf条件がtrueに設定された後にDOMの準備ができたら検出するには
- 21. 準備されたステートメントをPHPからトランザクションを通して使用することはできますか?
- 22. ファイルの準備ができている間、待機します
- 23. Mustacheで使用するためのNodeJS DBコンテンツの準備
- 24. MediaPlayerは準備できませんか?
- 25. Javaで「準備ができた」関数を送信する
- 26. OpenShift用の配備設定でイメージストリームを使用する方法
- 27. プレースホルダーなしで準備文を使用する必要があります
- 28. 準備が整うまでボタンを使用しないようにします。
- 29. selectクエリでPHPが準備した文
- 30. 導入準備コミットフェーズに失敗しました。トランザクションを準備できません。
をそれを見つけることができます。長い答えは、誰かがそれをしている可能性があるということなので、いくつかのGoogle検索を行います。まだ何かを見つけることができない場合は、自分で作って他の人が使用するために公開しないでください。 –
ありがとう、ありがとう。私はたくさんの検索を行ったが、成功はなかった。もちろん、私はすぐに解決策を見つけることはできません。ところで、私はPSI IMでこれを見ました... – borisbn