接続を詳しく見てみましょう。
connect( roiPopup->getsaveROIButton(), SIGNAL( clicked( ) ),
this , SLOT ( saveROI( cv::Mat ) ) );
私は意図的にそれを再フォーマットして、いくつかのことを示しました。
- パラメータを期待する
clicked
スロットにパラメータを持たない接続を試みています。saveROI
接続はの値を取得する場所を認識していないため、これは機能しませんcv::Mat
。
代わりに、パラメータも取得しないスロットを作成する必要があります。
- コメントでahendersonがすでに指摘しているよう
this
に、静的メソッド内から使用することはできません。
主な質問は、なぜ静的メソッドが必要なのかということです。ポップアップウィンドウが1つだけ必要なためですか?それが唯一の理由である場合、これは通常の方法です。
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
}
このソリューションは機能しますが、静的メソッドから呼び出す場合は、その静的メソッドにもMainThreadインスタンスを作成する必要があります。