如何通过Qt按钮在main.cpp中调用对象的成员函数?

时间:2018-07-12 20:31:49

标签: c++ qt class

我正在使用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()?或者,如何重新组织代码,以便可以访问该类实例?

1 个答案:

答案 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()是阻塞调用)。