c++ - 如何从 Qt 按钮调用 main.cpp 中对象的成员函数?

标签 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;
}

如何从 void MainWindow::on_pushButton_2_released() 调用 something.stop()?或者我如何重构我的代码以便我可以访问该类实例?

最佳答案

这个问题有很多方法,这取决于这个程序的结构到底应该是什么样子。一种简单的方法是向 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() 是一个阻塞调用)。

关于c++ - 如何从 Qt 按钮调用 main.cpp 中对象的成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51313987/

相关文章:

c++ - 字符串中的最大字符数

c++ - 除了 memcpy 之外,bit_cast 还会有什么额外的 UB?

c++ - 打印完成后如何从打印机获取 Qt 信号?

对类方法CalculateCost() 的Javascript 调用无法正常工作。不返回任何信息

ios - 如何防止修改字典副本

python : how to make subclasses 'closed' under methods inherited from its superclass

c++ - 从指针访问 map 的索引

c# - 如何旋转二维整数数组

qt - qt qml 和 qt Quick 的区别

c++ - (Qt C++) 将 QString 以二进制形式写入文件