我们能否从公共槽函数中发射信号?

4
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();
}

我想知道从槽refreshClicked发出信号1是否合法,同时,在槽内发出信号是否存在任何缺点。


1
是的,这是合法的。发出信号基本上立即对所有连接的插槽进行函数调用(除非它是排队连接,在线程之间发生,或者您在 connect 调用中指定它)。只是出于好奇,如果不是在插槽中,那么您会在哪里发出信号呢? - hyde
将插槽视为通用函数,并再次提出同样的问题。 - vahancho
1个回答

8

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接