2014-09-03 42 views
1

我創建了涉及從一個組合框(evaluation_box),導致加載所有有關這一特定主題到另一個組合框(sequence_combo_box)主題主題的選擇的GUI問題。關於SIGNAL/SLOT QT4

用於信號/槽的代碼​​如下

connect(ui_.evaluation_box, SIGNAL(currentIndexChanged(QString)), ui_.sequence_combo_box, SLOT(readSequenceFile(char *,char *,struct dirent *))); 

但是,在這樣做時出現以下錯誤消息:

Object::connect: No such slot QComboBox::readSequenceFile(char *,char *,struct dirent *) 
Object::connect: (sender name: 'evaluation_box') 
Object::connect: (receiver name: 'sequence_combo_box') 

頭文件包括以下內容:

#ifndef rqt_get_sequence_feeder__GetSequenceFeeder_H 
#define rqt_get_sequence_feeder__GetSequenceFeeder_H 

#include <rqt_gui_cpp/plugin.h> 

#include <ui_get_sequence_feeder.h> 
#include <dirent.h> 
#include <image_transport/image_transport.h>  
#include <sensor_msgs/Image.h>  
#include <opencv2/core/core.hpp>  
#include <QImage> 
#include <QList> 
#include <QMutex> 
#include <QString> 
#include <QSize> 
#include <QWidget> 
#include <vector> 

    namespace rqt_get_sequence_feeder { 

    class GetSequenceFeeder 
     : public rqt_gui_cpp::Plugin 
    { 

     Q_OBJECT 
     public: 
      GetSequenceFeeder(); 

     protected slots:    
      virtual void onFrameChanged(int); 
      virtual void readSequenceFile(char *folder,char *sequence,struct dirent *select); 
              . 
              . 
              . 
     protected:  
     Ui::GetSequenceFeederWidget ui_; 

    }; 
    } 

.cpp如下:

using namespace std; 
namespace rqt_get_sequence_feeder { 

GetSequenceFeeder::GetSequenceFeeder() 
    : rqt_gui_cpp::Plugin() 
    , widget_(0) 
{ 
    setObjectName("GetSequenceFeeder"); 
} 


void GetSequenceFeeder::initPlugin(qt_gui_cpp::PluginContext& context) 
{ 
    connect(ui_.evaluation_box, SIGNAL(currentIndexChanged(QString)),ui_.sequence_combo_box, SLOT(readSequenceFile(char *,char *,struct dirent *))); 
             . 
             . 
             . 
} 

void GetSequenceFeeder::readSequenceFile(char *folder ,char *sequenceFile,struct dirent *select) 
{ 
            . 
            . 
            . 
} 

我具備的功能readSequenceFile(char *folder,char *sequence,struct dirent *select);在頭文件爲protected slots:我也試過聲明爲public slot:聲明,沒有工作。我不明白我做錯了什麼。

+0

您是否在'.cpp'文件中有插槽的主體? – 2014-09-03 09:58:31

+2

你的班級裏有'Q_OBJECT'宏嗎?它似乎在尋找'QComboBox :: readSequenceFile',而不是'YourClass :: readSequenceFile',這表明宏的缺失。除非第一個參數的所有參數都有默認參數,否則無法連接。 – Angew 2014-09-03 10:01:38

+0

@Angew並與'QMapper'?我不得不使用一個,所以我出於好奇而問這個問題。 – 2014-09-03 10:06:48

回答

0

根據您的錯誤信息,您ui_.sequence_combo_box是一個QComboBox,顯然一個QComboBox沒有一個槽函數命名爲readSequenceFile
ui_.sequence_combo_box應該是繼承類QComboBox

+2

他可以擴展類並忘記了Q_OBJECT宏,在這種情況下,我認爲它會錯誤地在錯誤消息中打印子類名稱。 – 2014-09-03 10:09:53

+0

@JanickBernet:我已經在類中包含了'Q_OBJECT'宏。我不明白什麼是錯的 – ADI 2014-09-03 11:00:59