0

静的メソッド内からポップアップ ウィンドウを表示しようとしています。

 void MainThread::popup(void){
 static klassePopup* roiPopup;
 roiPopup = new SavingROI();
 roiPopup->show();}

clicked()このコードは正常に動作し、ウィンドウに 2 つの QPushbuttons が表示されますが、SIGNALを SLOT に接続するタイミングがわかりません。

次のコードは機能しませんでした:

 connect(roiPopup->getsaveROIButton(),SIGNAL(clicked()),this,SLOT(saveROI(cv::Mat)));

質問が明確ではないことはわかっていますが、コードをここにコピーするのは少し複雑です

4

1 に答える 1

2

接続を詳しく見てみましょう。

connect( roiPopup->getsaveROIButton(), SIGNAL( clicked(         ) ),
         this                        , SLOT  ( saveROI( cv::Mat ) ) );

私は意図的にそれを再フォーマットして、いくつかのことを示しました。

  1. パラメータを期待するclickedスロットにパラメータを持たない接続を試みています。saveROI接続はの値を取得する場所を認識していないため、これは機能しませんcv::Mat
    代わりに、パラメータも取得しないスロットを作成する必要があります。
  2. コメントで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インスタンスを作成する必要があります。

于 2013-01-14T15:05:48.377 に答える