Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在不使用信号插槽连接的情况下触发操作?_C++_Qt - Fatal编程技术网

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

C++ 如何在不使用信号插槽连接的情况下触发操作?,c++,qt,C++,Qt,触发Qt动作的常用方法是使用信号插槽连接。既然我的函数不是插槽,还有其他方法吗?例如一些直接调用?您可以添加与信号连接的插槽,并可以在其中调用函数。您可以添加与信号连接的插槽,并可以在其中调用函数。您可以使用Qt 5中新的QObject::connect语法将信号连接到非插槽方法。看起来是这样的: connect(action, &QAction::triggered, this, &MyClass::doSomeFunction); void windowAbout(){

触发Qt动作的常用方法是使用信号插槽连接。既然我的函数不是插槽,还有其他方法吗?例如一些直接调用?

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

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

您可以使用Qt 5中新的
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)
?谢谢。是的,这是可能的,但我个人会避免。