1

出力ウィンドウが特殊なQTextEditである Qt アプリケーションにコンソール ウィンドウがあり、コマンドがQLineEditから解析され、その後メイン プログラムによって実行された後に処理されるメッセージを出力します。ウィンドウは、通常のメッセージ、警告、および必要に応じてテキストを 6 種類のカスタム カラーで出力できます。8 つの異なるタイプのテキストはすべて、タイプ QColor の8 つの異なるQPropertiesによって色が定義されています。これらは、ロード時にQApplicationに適用される QSS ファイルを使用して、残りの出力ウィンドウのスタイリングと共に設定されます。特定の色でテキストを書き込むには、 QTextEditでsetTextColorを呼び出します。テキストを挿入する直前。(余談ですが、QTextEditで呼び出されたときのmoveCursorは、以前に設定されていたものに関係なく、挿入されるテキストの色をデフォルトの色にリセットするように見えますが、呼び出しの直後に目的のテキストの色を設定するようにしましたmoveCursorと insertPlainText を呼び出す前 )

私が抱えている問題は、 qApp->setStyleSheetを介して適用されたスタイリングが、メッセージ キューが処理されるまで実際には適用されないように見えることです (私が見る限り) 。プログラムが開始されると、スタイル シートが適用され、その後すぐにハードコードされたテスト メッセージがコンソール ウィンドウに送信され、最後のコンパイルの日付と時刻が表示されます。このメッセージは、元のQTextEditに出力されてしまいますスタイル シートの黒の背景色が適用された後は見えなくなります。問題は、スタイルが適用されるときにコンソール ウィンドウの標準テキストの色を設定するほど単純ではありません。スタイリングが有効になる前に、任意の数のメッセージがコンソール ウィンドウに送信される可能性があり、その結果、任意の数の異なる色のメッセージが表示される可能性があります。

この問題を解決する最善の方法を考えようとしています。現時点で私が考えることができる最善の方法は、メッセージがセマンティック タグで囲まれるタグ付け方法です (たとえば、すべての警告メッセージは HTML のようなタグで囲まれ、警告であることを指定します)。が適用されると、各メッセージは新しいスタイルに従って再配色されます。これには明らかに、QTextEdit の「OnStyleApplied」イベントへのフックが必要ですこれは可能でしょうか、それともこれを解決するためのより良い方法はありますか?

4

1 に答える 1

2

本当に qstylesheet の変更をメッセージ キューに適用している場合は、次の呼び出しの前に処理するようにメッセージ キューに指示します。

http://qt-project.org/doc/qt-5.0/qtcore/qcoreapplication.html#processEvents

処理するイベントのクラスを指定することもできます。

もう 1 つの方法は、必要なときにスタイルの変更を適用するようにウィジェットに明確に指示できることです。

先日、qstylesheets を使用したいくつかの高度な機能について詳しく調べました。

QList: メモリ不足

上記のリンクのpolishとの使用に注意してください。unpolish

しかし、すべての直接的な回答に加えて、リッチ テキスト編集用に作成されたクラスの使用を検討することをお勧めします。

http://qt-project.org/doc/qt-5.0/qtgui/richtext.html

構造はよく考えられており、それらを使用して多くのことができます。それらを理解するには学習曲線がありますが、うまく機能します。

これはあなたが話していることと関係があります...

また、Qt が持っている便利なツールは次のとおりです。

http://qt-project.org/doc/qt-5.0/qtcore/qtglobal.html#qInstallMessageHandler

それを と組み合わせると<some text editor/viewer class qt has>.append();、テキストを追加したいときにqDebug() <<呼び出しを使用するだけで、挿入されたスペース、改行、および多くの Qt クラスのデバッグ文字列表現の自動レンダリングのすべての機能を取得できます。

それが役立つことを願っています。

于 2013-11-12T04:03:37.103 に答える