如何在不使用信号插槽连接的情况下触发操作

How to trigger an action without using signal-slot connection?

本文关键字:连接 情况下 操作 插槽 信号      更新时间:2023-10-16

触发Qt操作的常用方法是使用信号槽连接。既然我的函数不是槽,还有其他方法吗?比如一些直拨电话?

您可以使用Qt 5中的新QObject::connect语法将信号连接到非插槽方法。它看起来像这样:

connect(action, &QAction::triggered, this, &MyClass::doSomeFunction);

在这个例子中,MyClass::doSomeFunction不需要是一个时隙。这里有一个更深入的解释。

如果你真的想触发一个QAction,你可以直接这样做,而不需要使用信号或插槽:

action->trigger();

您可以添加将与信号连接的插槽,并可以在其中调用函数。

如果在main()中连接,它可以是这样的:

void windowAbout(){
   QMessageBox aboutMB(QMessageBox::NoIcon, "About", "This is a weather forcast !");
   aboutMB.setIconPixmap(QPixmap(":/icon.ico"));
   aboutMB.exec();
}
int main(){
   ......
   QObject::connect(aboutAction, &QAction::triggered, &app, &windowAbout);
   ......
}