C++ 如何在不使用信号插槽连接的情况下触发操作?
触发Qt动作的常用方法是使用信号插槽连接。既然我的函数不是插槽,还有其他方法吗?例如一些直接调用?您可以添加与信号连接的插槽,并可以在其中调用函数。您可以添加与信号连接的插槽,并可以在其中调用函数。您可以使用Qt 5中新的C++ 如何在不使用信号插槽连接的情况下触发操作?,c++,qt,C++,Qt,触发Qt动作的常用方法是使用信号插槽连接。既然我的函数不是插槽,还有其他方法吗?例如一些直接调用?您可以添加与信号连接的插槽,并可以在其中调用函数。您可以添加与信号连接的插槽,并可以在其中调用函数。您可以使用Qt 5中新的QObject::connect语法将信号连接到非插槽方法。看起来是这样的: connect(action, &QAction::triggered, this, &MyClass::doSomeFunction); void windowAbout(){
QObject::connect
语法将信号连接到非插槽方法。看起来是这样的:
connect(action, &QAction::triggered, this, &MyClass::doSomeFunction);
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);
......
}
在本例中,MyClass::doSomeFunction
不需要是插槽
如果您确实想要触发QAction,可以直接触发,而不使用信号或插槽:
action->trigger();
您可以使用Qt5中新的
QObject::connect
语法将信号连接到非插槽方法。看起来是这样的:
connect(action, &QAction::triggered, this, &MyClass::doSomeFunction);
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);
......
}
在本例中,MyClass::doSomeFunction
不需要是插槽
如果您确实想要触发QAction,可以直接触发,而不使用信号或插槽:
action->trigger();
如果在main()中连接,则可以如下所示:
connect(action, &QAction::triggered, this, &MyClass::doSomeFunction);
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);
......
}
如果在main()中连接,则可以如下所示:
connect(action, &QAction::triggered, this, &MyClass::doSomeFunction);
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);
......
}
是否可以通过构建我自己的操作,重新实现受保护的函数来实现这一点
虚拟bool事件(QEvent*e)
?谢谢。是的,这是可能的,但我个人会避免。是否可以通过构建我自己的操作,重新实现受保护的函数来实现这一点虚拟布尔事件(QEvent*e)
?谢谢。是的,这是可能的,但我个人会避免。