2009-04-21 6 views
1

私は、メッセージを互いにエキスディングする2つのプロセスがあります。 プロセスAは、プロセスBにメッセージを送信する通常の(つまりqt以外の)プログラムです。 プロセスBは、受信したメッセージをテキストボックスに表示するQT GUIアプリケーションです。デザイナコードとランタイムコードを区別する

QPlainTextEditを継承し、タイマーが切れたときにパイプからメッセージを読み込んでテキストボックスに追加するカスタマイズされたウィジェット(ShowMessagesと呼ばれる)を作成しました。 コードは本当にこのように設計されていません(これはかなり悪いデザインだと思いますが)ここでは単純にするだけです。 qt-designerを使用してフォームを作成しているうちにプロセスAをシャットダウンすることはできません。

私はqtデザイナを使用しているので(ShowMessagesウィジェットを選択してウィンドウ内に配置しています)、ウィジェットはデザイナーにあってもメッセージを表示し始めます。この機能は素晴らしいですが、フォームを保存すると、すでに存在するメッセージが.uiファイルに保存されるため、プロセスBを開始すると悪い振る舞いになります(作成フェーズで受信したメッセージがプロセスに表示されるため) 。

プロセスBの開始直後にテキストボックスを消去することができましたが、.uiファイルに存在するメッセージを避ける方がはるかに優れていると思います。私が望むのは、ウィジェットのために次のようなコードを書くことです:

if <I'm not in the designer> 
    timer = QtCore.QTimer(self) 
    QtCore.QObject.connect(timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("on_timer()")); 
    timer.start(2000) 

私がデザイナーにいるかどうかを知るqt関数はありますか?デザイナーとランタイムコードの区別は「悪い」と思いますか?

答えて

1

たぶん、あなたのウィジェットは、それが「アクティブ」のかどうかのフラグを持っていて、デザイナーにいる間ので、Falseにそれをデフォルトで設定される必要があり、それはdoesnの(ミスのため申し訳ありませんが、英語は私の第一言語ではありません)何もしません。コードでは、メッセージを表示するときにアクティブに設定します。次に、他のシナリオでもこの機能を無効にすることができます。

しかし、私は、コントローラのコードを "ビュー"ウィジェットに入れているように思えます。これは、現在のQtデザイナの問題今)。

MVC(model-view-controller)デザインパターンをまだ読んでいない場合は、それを読み上げることを検討してください。

更新:

が公正であるためには、あなたの質問は、あなたがデザイナーにいるかどうかを検出する方法を尋ねた:)

http://doc.trolltech.com/4.3/designer-creating-custom-widgets.html#creating-well-behaved-widgets

カスタムを与えるために特別な 行動をウィジェットQtデザイナーは、 initialize()の実装を提供する ウィジェットを設定する関数 工事p Qt Designer の特定の動作のためのロセス。この関数は が初めて呼び出され、 がcreateWidget()に呼び出され、 はおそらく の内部フラグを設定できます.Qt DesignerがプラグインのcreateWidget()関数 を呼び出したときにテストされます。

ドキュメントによれば、基本的に、あなたのウィジェットのinitialize()関数で "inDesignerFlag"をtrueに設定することができます。ウィジェットのコードに必要なところでそのフラグを検出します。

関連する問題