发射信号不会连接到另一个对象的插槽

时间:2013-12-15 21:18:06

标签: c++ qt signals-slots

我正在尝试将asignal从一个类的对象连接到另一个类的插槽,但它不起作用。

描述:我有一个带有主窗口的项目和许多子对话框窗口。 我有兴趣从子对话框窗口向主窗口发送一些消息。

因此我创建了一个名为sms_list的类。该类中的代码应将消息添加到多组中,并将信号发送到pmainwindow。 PmainWindow应该将信号捕获到插槽中。但是当我调试它时,我发现它从sms_list发出信号,但实际上它无法连接插槽。 sms_list.h

#include <QString>
#include <QObject>
#include <QWidget >   
#include <set>
 class SMS_list:public QObject
{

   Q_OBJECT

  class LessSMSTime
     {
    public:
          /** Returns TRUE if the left time component is less than the right time
            * component
            */
            bool operator ()( const SMS& left, const SMS& right ) const;
   };

    typedef std::multiset<SMS, LessSMSTime> SMSSet

    public:

    SMS_list( PMainWindow* dialog_main )

    void add( const SMS& sms ); //SMS  is an object of another class called SMS

    //some other functions

   signals:

   void display_msg_up();

   private:
    // some private functions 
    PMainWindow*    dialog_main_;
    SMSSet          sms_;
};

sms_list.cpp

#include "Message_list.h"

Message_list::Message_list( PMainWindow* dialog_main )
: dialog_main_( dialog_main )
{

}


void SMS_list::add(const  SMS& sms )
{
 QMutex mutex;
  mutex.lock();
   // some more codes ..


sms_.insert( sms );// sms_ is a multi set

 emit display_msg_up();//signal to connect to slot on main window
mutex.unlock();
 } 

PMainWindow.h

class  PMainWindow : public QDialog, private Ui::PMainWindow
{
   Q_OBJECT

public:
    PMainWindow(QWidget *parent = 0);

// some more declarations

public slots:
  // some more slots
  void on_add_msg();// to add messages on QTable widget 

private:

// some more variable dec
SMS_list*                    sms_list_;

}

PMainWindow.cpp

PMainWindow::PMainWindow(QWidget *parent)
    : QDialog(parent), 
       // some other variable
       sms_list_( 0 )
{

  ui.setupUi( this );
  init_cal_signals();

  // some more function called  

}
void PMainWindow::init_cal_signals()
{

   sms_list_ = new SMS_list( this );
  connect( sms_list_, SIGNAL(  sms_list_->display_msg_up( ) ) ,  this , SLOT ( on_add_msg()  ) ); 

}

void PMainWindow::on_add_msg()
{

 qDebug() <<" Sadly code has not reached here .. " ;


}

欢迎提出任何建议/批评。 谢谢

0 个答案:

没有答案