QT将信号和插槽从不同类别连接到主窗口类别?

时间:2018-08-30 08:02:24

标签: c++ qt signals-slots

我想在两个mainwindowreader类之间实现信号和时隙。

reader类中,我声明了信号SetProgress

reader.h

class reader :public QObject
    {
        Q_OBJECT    
         signals:
             void SetProgress(QString sOperation, int nPercentage);
}

reader.cpp

 void reader::UpdateProgress(double amount)
{
     int nPrecentage = (100 * amount / (max- min));
     emit SetProgress(m_sCurrentOperation, nPrecentage); 
}

mainwindow.h

    public:
    reader *MyReader

private slots:

    void SlotDisplayProgress(QString sActivity_i, int ProgressPercentage_i);

mainwindow.cpp

void mainwindow :: SlotDisplayProgress(QString sActivity_i, int nProgressPercentage_i)
{
     this->ui->QprogressBar->setValue(nProgressPercentage_i);
}

在Mainwidow.cpp内部,我将声明信号和插槽

MyReader = reader::New();
connect ( MyReader, &reader::SetProgress, this, &mainwindow::SlotDisplayProgress );

我尝试调试,直到emit部分为止一切正常。但是,slot永远不会执行。

2 个答案:

答案 0 :(得分:0)

是MyReader指针吗?否则,请使用&MyReader。

答案 1 :(得分:0)

尝试设置Qt :: DirectConnection:

connect ( MyReader, &reader::SetProgress, this, &mainwindow::SlotDisplayProgress, ***Qt::DirectConnection***);

我遇到了这样的问题,我在信号和插槽之间进行了连接,并且仅在定义连接类型时才起作用。

我希望这会有所帮助。


PS。我不知道这是否取决于QT的版本,但是当我连接信号和插槽时,我编写的语法如下:

ImageURLLoadListener* downloader = new ImageURLLoadListener(&id, socket);
connect(downloader, SIGNAL(imageLoaded(QString*,QTcpSocket*)), this, SLOT(on_resourceImageDownload(QString*,QTcpSocket*)), Qt::DirectConnection);

我不知道它是否相关...