我正在使用Qt,并且在GUI上有一个开始/停止按钮。当应用程序打开时,我在main.cpp文件中调用以下代码:
QApplication a(argc, argv);
MainWindow w;
w.show();
Something something;
something.start();
在Qt创建的mainwindow.cpp文件中,我具有按下停止按钮时会调用的函数:
void MainWindow::on_pushButton_2_released()
{
std::cout << "stopped" << std::endl;
}
如何从something.stop()
呼叫void MainWindow::on_pushButton_2_released()
?或者,如何重新组织代码,以便可以访问该类实例?
答案 0 :(得分:1)
有很多解决此问题的方法,这取决于该程序的结构究竟是什么样。一种简单的方法是向MainWindow类添加一个构造函数,该构造函数采用指向something
的指针并将该指针存储为成员,即
class MainWindow : public QMainWindow
{
public:
...
MainWindow(Something* something) : something_ptr(something)
{
...
}
...
private:
Something* something_ptr;
...
void MainWindow::on_pushButton_2_released()
{
something_ptr->stop();
}
}
然后通过您的主要功能:
QApplication a(argc, argv);
Something something;
MainWindow w(&something);
something.start();
w.show();
由于您可能在此之后调用a.exec()
,所以在应用程序退出之前将存在某些内容(因为exec()
是阻塞调用)。