Qt/ c++:在一个类中集中参数

Qt/C++ : Centralise parameters in one class

本文关键字:一个 参数 集中 c++ Qt      更新时间:2023-10-16

我试图将一些参数集中在一个类中。我看了几个论坛和教程,没有找到任何真正的答案。也许我没有正确使用Qt。

我有一个Qt类Application处理这些参数。

Application.h

class Application : public QApplication
{
     public:
        Application(int, char**);
        ~Application();
        bool setFilesPath(QString path);
        QString getFilesPath();
    private:
        QString filesPath;
}

main.cpp

int main(int argc, char *argv[])
{
    Application app(argc, argv);
    MainWindow mainWindow;
    mainWindow.show();
    return app.exec();
}

我想从任何地方访问setFilesPath()getFilesPath()方法(例如在另一个类中)。因此,一个应用程序从QApplication继承,希望qApp.setFilesPath()将工作。

从任何地方访问一些参数似乎是一件很平常的事情。那么怎么做呢?

我发现有三种方法:

    全局变量
  • 静态方法
  • 在每个需要该方法的类中包含一个Application的实例(但这似乎是错误的)

哪个更常用(为什么)?为什么我的方法不管用?

谢谢。

编辑:在本主题中,他们使用单例设计模式。调用

Application *app = Application::getInstance();

我需要它的地方。

您可以使用qApp指针访问您的类。根据Qt文档:

指向唯一应用程序对象的全局指针。它是相当于QCoreApplication::instance()返回的指针函数,只是在GUI应用程序中,它是指向QApplication实例。

所以,你的代码可能看起来像:
Application *myApp = qobject_cast<Application *>(qApp);
QString path = myApp->getFilesPath();

您可以在主程序中独立地拥有您的类,并将需要访问您的类中的值的每个类的信号连接到返回值的插槽:

int main(int argc, char *argv[])
{
    Application app(argc, argv);
    MainWindow mainWindow;
    MyClass myclass1;
    QObject::connect(&mainWindow,SIGNAL(askFilesPath()),myclass1,SLOT(getFilesPath()));
    mainWindow.show();
    return app.exec();
}

这样,当你在MainWindow中调用askFilesPath()信号时,你的自定义类中的槽被调用并返回值:

QString filePath = askFilesPath();

你应该注意,如果两个类在不同的线程中,那么连接类型应该是Qt::BlockingQueuedConnection