如何调用作为插槽的qt函数
How to call a qt function that is a slot?
我正在使用由QT4生成GUI的开源代码。我想做的是稍微更改代码,此时需要在GUI上按下一个按钮。我想要的是要调用的函数,这样我就不必按下按钮来执行它
该函数是在公共插槽下的类tum_ardrone_gui中定义的。这个函数被称为SendClicked(),所以我通过定义一个对象来调用这个函数,比如:
tum_ardrone_gui* gui;
gui->SendClicked();
我遇到了一个错误,是我的语法错误,还是不允许我这样调用"slots"定义的函数?
提前感谢!
第1版:谢谢大家的帮助。这是我的主.cpp文件:
#include "../UINode/tum_ardrone_gui.h"
#include "../UINode/RosThread.h"
#include "../UINode/PingThread.h"
#include <QtGui>
#include <QApplication>
#include "ros/ros.h"
// this global var is used in getMS(ros::Time t) to convert to a consistent integer timestamp used internally pretty much everywhere.
// kind of an artifact from Windows-Version, where only that was available / used.
unsigned int ros_header_timestamp_base = 0;
int main(int argc, char *argv[])
{
std::cout << "Starting drone_gui Node" << std::endl;
// ROS
ros::init(argc, argv, "drone_guiuno");
RosThread t;
PingThread p;
// UI
QApplication a(argc, argv);
tum_ardrone_gui w;
// make them communicate with each other
t.gui = &w;
w.rosThread = &t;
p.gui = &w;
p.rosThread = &t;
w.pingThread = &p;
// start them.
t.startSystem();
p.startSystem();
w.show();
// Error 1):
//tum_ardrone_gui gui = new tum_ardrone_gui();
//gui->SendClicked();
//delete gui;
// DOES NOT COMPILE: ERROR MESSAGE /usr/include/qt4/QtGui/qwidget.h: In copy constructor ‘tum_ardrone_gui::tum_ardrone_gui(const tum_ardrone_gui&)’:
// /usr/include/qt4/QtGui/qwidget.h:806:5: error: ‘QWidget::QWidget(const QWidget&)’ is private
//Error 2): Compiles and works! But why didn't the above?
w.SendClicked();
// wait until windows closed....
int ec = a.exec();
// stop ROS again....
t.stopSystem();
p.stopSystem();
std::cout << "Exiting drone_gui Node" << std::endl;
return ec;
}
这里的主要问题是,您只将gui
声明为指向tum_ardrone_gui
的指针,但实际上并没有创建对象。相反,你应该做一些类似的事情:
tum_ardrone_gui gui = new tum_ardrone_gui();
gui->SendClicked();
但是,当你完成gui
时,一定要删除它。例如,如果这段代码在一个小部件中,只需编写
tum_ardrone_gui gui = new tum_ardrone_gui(this);
当分配CCD_ 5时,然后当该小部件失效时它将被释放。
至于你的问题,从C++的角度来看,Qt槽只是一个常规方法,所以像调用方法一样调用它。
相关文章:
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- QT 插槽未在主线程上调用
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- Qt插槽调用了两次
- C++Qt信号和插槽
- Qt moveToThread,带有参数的信号/插槽
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 在Qt中执行完所有插槽后,如何释放对象
- 使用std::bind将Qt信号连接到插槽
- 在Qt中使用C++Lambda函数作为插槽是否有助于保持库的二进制兼容性?
- Qimage没有通过信号插槽QT
- 将一个信号连接到多个插槽 Qt
- 为什么我不能从基类插槽Qt调用虚函数
- 动态创建自定义小部件的新实例并连接信号和插槽(Qt)
- 将QML信号连接到c++ 11 lambda插槽(Qt 5)
- 发射信号和插槽 (Qt) 的信息和控制