如何在静态方法中将信号连接到插槽
How do I connect a signal to a slot in a static method?
我正在尝试从静态方法中显示一个弹出窗口:
void MainThread::popup(void){
static klassePopup* roiPopup;
roiPopup = new SavingROI();
roiPopup->show();}
这段代码工作得很好,我得到我的窗口与两个qpushbutton,但我不明白当我应该连接信号clicked()
与插槽。
下面的代码不起作用:
connect(roiPopup->getsaveROIButton(),SIGNAL(clicked()),this,SLOT(saveROI(cv::Mat)));
我知道这个问题不是很清楚,但是这里的代码复制起来有点复杂
让我们仔细看看您的连接:
connect( roiPopup->getsaveROIButton(), SIGNAL( clicked( ) ),
this , SLOT ( saveROI( cv::Mat ) ) );
我有意重新格式化它,以显示一些东西:
- 您正在尝试将没有参数的
clicked
连接到需要参数的插槽saveROI
。这不起作用,因为连接不知道从哪里获得cv::Mat
的值。
相反,您需要创建一个不检索参数的槽。 - 正如ahenderson在评论中已经指出的那样,您不能在静态方法中使用
this
。
主要问题是,为什么需要静态方法?因为你只想要一个单一的弹出窗口?如果这是唯一的原因,您通常会这样做:
MainThread.h:
class klassePopup; // Note: This is a "forward declaration".
// Google it if you don't know what that is.
class MainThread : public QObject // or anything else which inherits QObject
{
public:
MainThread();
~MainThread();
public:
void popup(); // not static
private slots:
saveROI(); // no parameter
private:
klassePopup* _roiPopup;
};
MainThread.cpp:
#include "klassePopup.h"
#include "SavingROI.h"
MainThread::MainThread() :
_roiPopup( new SavingROI() )
{
bool bConnectionSucceeded
= connect( _roiPopup->getsaveROIButton(), SIGNAL( clicked() ),
( this , SLOT ( saveROI() ) );
}
MainThread::~MainThread()
{
delete _roiPopup;
}
void MainThread::popup()
{
_roiPopup.show();
}
void MainThread::saveROI()
{
// retrieve your cv::mat parameter from somewhere else
}
这个解决方案可以工作,但是如果你想从静态方法调用它,你必须在静态方法中创建你的主线程实例
相关文章:
- 如何使用新语法QT5将信号连接到信号?
- 使用std::bind将Qt信号连接到插槽
- 为什么信号连接会使套接字客户端对象失效?
- 如何将信号连接到类的所有实例的插槽
- Qt:将受保护的 QListWidget::itemChanged 信号连接到插槽
- QML组件与信号连接
- Qt:如何将不同类别的静态信号连接到插槽
- QT:将信号连接到具有移动语义的插槽
- 将一个信号连接到多个插槽 Qt
- Qt5:无法将信号连接到插槽
- 这个Qt DBus信号连接代码是否正确
- QtQuick2 无法将应用程序窗口关闭信号连接到方法(C++新手)
- 将返回对象的信号连接到没有参数的插槽
- 如何使用新的QObject::连接语法与函数指针将QSslSocket::错误信号连接到插槽
- Qt将信号连接到插槽
- Qt5 将自定义窗口关闭信号连接到其他窗口
- 将所有对象信号连接到单个插槽
- 如何使用QT5中的lambdas将具有int参数的信号连接到具有枚举参数with的插槽
- 可以将多个信号连接到单个插槽
- 是否可以在没有接收器实例的情况下将信号连接到静态插槽