Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt工具栏/qtoolbutton操作从未触发_C++_Qt_Qtoolbar - Fatal编程技术网

C++ Qt工具栏/qtoolbutton操作从未触发

C++ Qt工具栏/qtoolbutton操作从未触发,c++,qt,qtoolbar,C++,Qt,Qtoolbar,出于某种原因,我有以下代码,从UI窗口中,MyActionDock继承自QToolBar,显示时没有任何问题,当单击按钮时,按钮颜色也发生了变化,但与信号相连的插槽(a1ActionSlot()和a2ActionSlot())从未调用,感觉好像从未触发该操作。我正在使用Qt4.7.2。怎么了?非常感谢 我相信用于Qt4.6或更早版本的代码可以正常工作。不知道问题什么时候发生 MyActionDock::MyActionDock (QWidget *parent) : QToolBar (p

出于某种原因,我有以下代码,从UI窗口中,MyActionDock继承自QToolBar,显示时没有任何问题,当单击按钮时,按钮颜色也发生了变化,但与信号相连的插槽(a1ActionSlot()和a2ActionSlot())从未调用,感觉好像从未触发该操作。我正在使用Qt4.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
}

插槽在错误的类中

您可以在此处声明插槽a1ActionSlot位于MyActionDock类中:

connect (a1Action , SIGNAL (triggered()), this, SLOT(a1ActionSlot()));
第三个参数是“this”(它指向MyActionDock类)

在类QtCanvasActionDock中实例化a1ActionSlot方法

void QtCanvasActionDock::a1ActionSlot()

插槽在错误的类中

您可以在此处声明插槽a1ActionSlot位于MyActionDock类中:

connect (a1Action , SIGNAL (triggered()), this, SLOT(a1ActionSlot()));
第三个参数是“this”(它指向MyActionDock类)

在类QtCanvasActionDock中实例化a1ActionSlot方法

void QtCanvasActionDock::a1ActionSlot()

正如Jay所建议的,直接连接到QToolButton,不添加操作,它就可以工作了。我认为这是一个与Qt升级相关的问题。该代码过去在Qt4.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()));

正如Jay所建议的,直接连接到QToolButton,不添加操作,它就可以工作了。我认为这是一个与Qt升级相关的问题。该代码过去在Qt4.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()));

对不起,我搞错了,改名字的时候忘了换那部分。现在更正。您是否将a1ActionSlot方法声明为插槽?(“公众时段:”)是的。这些插槽在头文件中声明。头部也是一个Q_对象,使用moc编译。它过去适用于较旧版本的Qt。这些操作将为您设置并连接事件。我认为手动操作然后使用操作是相互冲突的。尝试只使用一个常规按钮和一个connect(),但不使用任何操作;和连接(按钮,信号(点击()),此,成员);但是不要调用AddAction(),它对meSorry有效,我的错误是,当更改名称时,忘记更改那些部分。现在更正。您是否将a1ActionSlot方法声明为插槽?(“公众时段:”)是的。这些插槽在头文件中声明。头部也是一个Q_对象,使用moc编译。它过去适用于较旧版本的Qt。这些操作将为您设置并连接事件。我认为手动操作然后使用操作是相互冲突的。尝试只使用一个常规按钮和一个connect(),但不使用任何操作;和连接(按钮,信号(点击()),此,成员);但是不要调用AddAction(),它对我很有效