2017-08-18 6 views
0

スタイルシートの使用すべての子供を含むウィンドウのスタイルを変更しようとしています。Qtスタイルシートの再計算を強制すると何もしません。

子どもの名前はすべてsetObjectNameであり、スタイルシートは同じ名前を使って名前付きウィジェットのスタイルを変更します(変更する必要のない抽出ファイルもいくつかあります)。私は最初にstd::mapに値を挿入し、QWidget#hello!hoverなどの名前をbackground-color#0f0f0fなどのキーと値のペアのセットにマッピングしてスタイルシートを再計算しています。私。 ["QWidget#hello!hover"]["background-color"] = "#0f0f0f"は、1つのエントリになります。スタイルシートマップはI全体スタイルシートを再計算し、(おそらく、これは、スタイルシートの再計算を強制するべきである)上部に/* */を追加、メインウィジェットにsetStyleSheetを使用して設定変更される

。しかし、これはまったく何もしていないようです。

これを行うと、メインウィジェットのコンストラクタでうまく動作しますが、最初に設定されていれば何もしません。

私が計算したスタイルシートは有効で、すべてのエントリーは予想どおりの順序で並べられています。ウィジェットはすべて期待通りの名前で、最初に設定していますので、新しいスタイルシートは効果がありません。あるいは単に子どもに影響を与えません。

私はこの問題を解決するにはどうすればよい

のWindows 10上でのQt 5.4(本来はQT3用に開発されています古いくだらないがらくたソフトウェア)を使用していますか?

+0

正確な例がないと言うことは難しいですが、 1)デフォルトで「融合」スタイルを使用してください。 2)スタイルシートを「再読み込み」するには、スタイルシートをリセットせずに 'w-> polish(); w-> unpolish();を呼び出す必要があります。 3)あなたのCSSは本当に奇妙に見えます。疑似コードですか? –

+0

@DmitrySazonovすべての子にスタイルシートを設定するだけで問題を解決した場合。 – Clearer

答えて

0

メインウィジェットのすべての子にスタイルシートを設定することで問題を解決しました。新しいスタイルシートを計算し、stylesheetという名前の、QStringに格納した後、私が使用:

QList<QWidget*> children = findChildren<QWidget*>(); 
for (QList<QWidget*>::iterator child = children.begin(); child != children.end(); ++child); 
    (*child)->setStyleSheet(stylesheet); 

、すべてが魅力のように働きました。変更は非常に稀で、ウィンドウ内にはたくさんのものがないので、これを行うコストはそれほど大きなものではありません - より効果的に行うことができると確信しています。

関連する問題