关于SIGNAL/SLOT qt4的问题

Issues regarding SIGNAL/SLOT qt4

本文关键字:问题 qt4 SLOT SIGNAL 关于      更新时间:2023-10-16

我创建了一个GUI,它涉及从一个组合框(evaluation_box)中选择主题,从而将与该特定主题相关的所有主题加载到另一个组合盒(sequence_combo_box)中。

SIGNAL/SLOT使用的代码如下

  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:,但没有成功。我不明白我做错了什么。

根据您的错误消息,您的ui_.sequence_combo_boxQComboBox,显然QComboBox没有名为readSequenceFile的槽函数
ui_.sequence_combo_box应该是继承QComboBox 的类