問題タブ [qsettings]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - QSettings から派生し、QIcon を保存します
次のように QSettings から派生したクラスを使用して QIcon を保存しようとしました。
setValue("fancy_icon", QIcon::fromTheme("document-new"));
しかし、私はエラーがあります:
QVariant::save: タイプ 69 を保存できません。
そして、それは機能しません。驚いたことに、QSettings インスタンスを構築して 69 の type(QIcon) 要素のいずれかを保存すると、正常に動作します。
問題は、なぜ今それが機能するのかということです。どうすればもっとうまくできますか?
pyqt4 - ブール値を持つ Qsettings を使用して設定辞書を反復処理する
うーん、(Python) 辞書で PyQt 設定を管理するのは賢いと思いました。そうすれば、少なくとも保存と比較のために設定を反復できると思いました。
しかし、ブール値を使用すると問題が発生しました。
方法があります
これは、s にブール値がない限り機能します。
ディクショナリにブール値がある場合、関数は常に True を返します。
行のコメントを外すprint
と、問題が表示され、次の結果になります
true
問題は、QSettings が返すこの小文字は何ですか? Python でこれをブール値と正しく比較するにはどうすればよいでしょうか?
toBool()
さまざまなプラットフォームでのさまざまな表現を補うために使用する必要があることを読みました。しかし、そのようなループでこれを行う方法がわかりません(つまり、比較するタイプが事前にわからない)。
ヒントや解決策をいただければ幸いです。
symbols - QSettings はグループ名にパーセント記号を追加します
QSettings オブジェクトを ini 形式で持っています。ini ファイル
に書き込むと、次のように表示されます。settings.beginGroup("GENERAL")
[%General]
なぜこれが起こるのですか?
qt - 値にコンマ文字が含まれている場合に QSetting を使用して値を読み取る方法
私の QT プロジェクトでは、QSettings を使用して .ini ファイルから値を読み取っています。値にコンマ文字が含まれている場合、QSettings はそれを読み取ることができません。このような値はどのように読み取ればよいでしょうか。
c++ - QSettings へのカスタム クラスの書き込みと読み取り
QSettings を介してカスタム クラスのインスタンスをレジストリに保存する必要があります。Qt のドキュメントを読んだ後、必要な機能を実装したと思いますが、何も保存できません。
ここに私のカスタムクラスがあります:
レジストリに保存:
レジストリから読み込み中:
レジストリに新しいキーが作成されますが、クラスの名前だと思われる16進コードが含まれています...
値を効果的に保存する方法はありますか?
qt - QSettings、qmlRegisterType()、および setContextProperty に関するいくつかのクエリ
現在開発中のアプリケーションを通して、私の混乱を説明してみます。
私のアプリケーション (Qt5.1 + Qt Quick Controls に基づく) は、Facebook API とやり取りして Facebook ページを管理します。QML コード (UI 用) を C++ コアからできるだけ分離しようとしています。
現在、Facebook API と対話できるようにするには、OAuth2 実装が必要です。そのために、C++ OAuth2 クラスがあり、そのコンストラクターには次のシグネチャがあります。
OAuth2::OAuth2(QString appId, QString redirectUrl, QStringList パーミッション);
ここで、OAuth プロセスにはブラウザーが必要なので、OAuth2 を使用して承認を完了する OAuthBrowser.qml も実装しました。
OAuth2 クラスを OAuth2Browser に公開するには、次のオプションがあります。
- OAuth2 をインスタンス化し、setContextProperty() を使用してインスタンスを OAuth2Browser に公開します。ただし、これは私の C++ コードが UI コードを処理する必要があることを意味します。さらに不可解な問題は、OAuth2Browser がセカンダリ ウィンドウであることです。ユーザーが MainWindow の「Authorize」ウィンドウをクリックすると、
(MainWindow に接続された) AppController C++ オブジェクトが OAuth2Browser ウィンドウを起動します。したがって、OAuth2Browser のインスタンス化コードは、AppController メソッドの奥深くに入ります。main.cpp だけがウィンドウの作成を処理すればよかったのに。 - qmlRegisterType() を使用します。この場合、コンストラクターにパラメーターを渡すことはできません。そのため、OAuth2 オブジェクトを初期化する init() メソッドを実装する必要があります。次に、OAuth2Browser の Component.onCompleted() メソッドでこの init() メソッドを呼び出します。しかし、このアプローチでは、QSettings を UI コード - QML ウィンドウに公開する必要があります。取得されます。アプリケーション設定を QML UI に直接公開することが良い考えかどうかについて、私は非常に懐疑的です。
- OAuth2 コンストラクター内で暗黙的に QSettings を使用します。この方法では、パラメーターを渡す必要はなく、qmlRegisterType() を使用できます。ただし、これは、「カーテンの後ろ」で魔法のようなことをしていることを意味します。QSettings インスタンスを明示的に渡す代わりに、好きな場所でそれを使用しているため、パブリック API から初期化の詳細を隠しています。
3 番目のオプションに基づく代替案が IRC でアドバイスされました。パラメーターがコンストラクターに渡されない場合は、initFromSettings() タイプのメソッドを使用してインスタンスを初期化します。そうすれば、初期化は隠されず、initFromSettings() はそれ自体で QSettings を自信を持って使用できます。これで、qmlRegisterType() を使用して QML で OAuth2 をインスタンス化できるようになりました。
それで、より良いアプローチは何ですか?
また、
- QSettings を QML UI に直接公開することは良い考えですか?
- 個人的には、setContextProperty() よりも qmlRegisterType() を好みます。登録されたクラスのインスタンスの有効期間は、QML によってのみ維持されます。ただし、初期化のために何らかの形式の init() が
明示的に使用されない限り、パラメーター化されたコンストラクターがサポートされていないため、前者が使用される可能性は低くなります。それは良いデザインですか?
とてつもなく長い文章を前もってお詫びします。でもここで聞いてよかったと思いました。