0

なぜかUIウィンドウから以下のコードがあり、QToolBarから継承したMyActionDock、問題なく表示され、ボタンをクリックするとボタンの色も変わってしまいますが、スロット(a1ActionSlot()、シグナルに接続された a2ActionSlot()) が呼び出されることはなく、アクションがトリガーされないように感じます。Qt 4.7.2 を使用しています。どうしたの?どうもありがとう。

コードは Qt4.6 以前で正常に動作していたと思います。いつ問題が発生するかわかりません。

MyActionDock::MyActionDock (QWidget *parent) :
   QToolBar (parent)
{
   setOrientation (Qt::Vertical);
   setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
   setFixedWidth(canvas()->toolsDockWidth());

   // ACTIONS

   QToolButton * a1btn= new QToolButton (this);

   a1btn->setText("Action 1");
   a1btn->setIcon(QIcon("a1.png"));
   a1btn->setToolTip ("Some action a1");
   a1btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

   QAction *a1Action = addWidget(a1btn);
   connect (a1Action , SIGNAL (triggered()), this, SLOT(a1ActionSlot()));
   addAction (a1Action);

   QToolButton * a2Btn = new QToolButton (this);

   a2Btn ->setText("A2");
   a2Btn ->setIcon(QIcon("a2.png"));
   a2Btn ->setToolTip ("something");

   QAction *a2Action= addWidget(a2Btn );
   connect (a2Action, SIGNAL (triggered()), this, SLOT(a2ActionSlot()));
   addAction (a2Action);

}

void MyActionDock::a1ActionSlot()
{
    //do something
}

void MyActionDock::a2ActionSlot()
{
   //do something
}
4

2 に答える 2

3

Jay が提案したように、QToolButton に直接接続し、addAction を実行しないと、機能します。これは Qt のアップグレードに関連する問題だと考えてください。このコードは Qt 4.6 以前では機能していましたが、4.7 以降では機能しなくなりました。したがって、4.7 で QToolButton を使用する場合は、ボタンの信号を直接接続します。

   QToolButton * a2Btn = new QToolButton (this);

   a2Btn ->setText("A2");
   a2Btn ->setIcon(QIcon("a2.png"));
   a2Btn ->setToolTip ("something");

   addWidget(a2Btn );
   connect (a2Btn , SIGNAL (clicked()), this, SLOT(a2ActionSlot()));
于 2013-01-28T16:05:56.920 に答える
1

スロットが間違ったクラスにあります。

ここで、スロット a1ActionSlot がクラス MyActionDock にあることを宣言します。

connect (a1Action , SIGNAL (triggered()), this, SLOT(a1ActionSlot()));

3 番目のパラメーターは「this」です (これは MyActionDock クラスを指します)。

クラス QtCanvasActionDock で a1ActionSlot メソッドをインスタンス化します。

void QtCanvasActionDock::a1ActionSlot()
于 2013-01-25T21:52:14.983 に答える