我们可以从公共插槽发出信号吗?

Can we emit a signal from a public slot

本文关键字:信号 插槽 我们      更新时间:2023-10-16
class MyMainWindow:public QMainWindow {
    public:
        MyWindow* myWindow() { return myWindow ;}
    private:
        MyWindow* myWindow;
};
class MyWindow:public Qobject {
    private slot:
        void mySlot();
};
class MyWindow2: class QWidget {
    public slot:
        void refreshClick();
    signals:
        signal1();
};
MyWindow2::MyWindow2(QMainWindow* parent) {
    QPushButton* refresh;
    QObject::connect(refresh,SIGNAL(clicked()), this, SLOT(refreshClicked()));
    if(parent) {
         QObject::connect(this,SIGNAL(signal1),parent->myWindow(),SLOT(mySlot));
    }

}

void MyWindow2::refreshClicked(){
    emit signal1();
}

我想知道从插槽刷新单击发出信号 1 是否合法,以及从插槽内发出信号是否有任何缺点

是的,完全没问题。但是,如果您的唯一目标是"转发"信号,您也可以将"传入"信号直接连接到正在发送的信号。例如:

connect(advisor   , SIGNAL(hasAdvice()),
        this      , SIGNAL(executeAdvice())
       )

但请记住,这并不总是有利于代码的可扩展性。