2012-02-18 2 views
3

私は最近のQtを勉強して、以下の質問を持ってきた:QAction vs QToolButtonと、いつBasicクラスをオーバーライドするのですか?

  1. QActionQToolButtonの違いは何ですか?
  2. QPushButtonを無効にする方法を知りたいのですが?たとえば、マウスがQPushButtonの境界に入ったときに通知するためにオーバーライドする必要がありますか?私は入手するためにする必要はありませんsignalclick()
+0

2番目の質問を言い換えることができますか?それは意味をなさない。 – cmannett85

+0

私はそれを編集hava ..ありがとう... –

+0

なぜdownvotes?これは新しいユーザーからの助けのための非常に有効な(未検出の)要求です... – sjwarner

答えて

7

質問1:

QAction Sは、異なるユーザインターフェイスオブジェクトの数で理解できるように、アプリケーションによって実行されるタスクを定義するために使用されます。コンテキストの場合はexample from the Qt docsを使用:

QActionが定義されています。それは、アイコン画像、テキスト記述、キーボードショートカット、およびより長いツールチップ記述を与えられ、ユーザ定義関数にリンクされる。

newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this); 
newAct->setShortcuts(QKeySequence::New); 
newAct->setStatusTip(tr("Create a new file")); 
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile())); 

その後の実装では、QActionが両方のテキストのメニューバーに追加されます...

fileMenu->addAction(newAct); 

...とアイコンベースのツールバー:

fileToolBar->addAction(newAct); 

メニューバーは、テキストの説明を使用して、アクションに対応するメニュー項目を作成します。同様に、ツールバーはQActionに設定されたアイコンを使用して、アクションに対応するアイコンをツールバーに作成します。メニューアイテムを選択するか、ツールバーアイコンをクリックするか、キーボードショートカットを押すと、すべて同じ結果になります。QAction::triggered()からnewFile()へのリンクによって定義されたものと同じです。 QActionは、様々なパラメータおよびアプリケーションによって実行される特定のタスクの振る舞いを定義する抽象方法です。だから、直接あなたの質問に答えるために

。はい、QPushButtonQAbstractButtonから継承clicked()signalを有するが、それがない

QToolbarButtonQToolbar::addAction()


質問2に応答してQToolbarによって作成された(QWidget由来)UIオブジェクトであります実際にマウスがその境界に入った時を知らせる手段がない。これを達成するにはいくつかのオプションがありますが、最初にmouseTrackingプロパティを有効にするように設定する必要があります。これにより、マウスボタンが押されていなくてもQPushButtonでマウス移動イベントを受け取ることができます。それが行わを使用すると、次のいずれかのオプションを検討する必要があります。

  1. あなたが示すように、あなたがQPushButtonをサブクラス化して、マウスの位置に対応するためにmousePressEventを再実装できます。
  2. QPushButtonに別のウィジェットをeventFilterとしてインストールし、(QEvent::MouseMove)のイベントを監視することができます。
+0

あなたに非常に感謝します...あなたの考えは明確で、いいです –

関連する問題