我有以下一段代码,出于某种原因,从UI窗口,MyActionDock继承自QToolBar,它显示没有任何问题,当点击按钮时,按钮颜色也改变了,但是插槽(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
}
答案 0 :(得分:2)
正如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()));
答案 1 :(得分:1)
插槽位于错误的类中。
您在此处声明插槽a1ActionSlot位于MyActionDock类中:
connect (a1Action , SIGNAL (triggered()), this, SLOT(a1ActionSlot()));
第三个参数是'this'(指向MyActionDock类)。
在QtCanvasActionDock类中实例化a1ActionSlot方法。
void QtCanvasActionDock::a1ActionSlot()