Qt/ c++:在一个类中集中参数
Qt/C++ : Centralise parameters in one class
我试图将一些参数集中在一个类中。我看了几个论坛和教程,没有找到任何真正的答案。也许我没有正确使用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
。
相关文章:
- 构造函数在退出函数时无法初始化一个参数
- 运算符重载:"operator+"必须采用零个或一个参数
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 两个函数模板候选项.将一个参数作为引用后,选择不太专业的模板
- 如何设置默认参数以防用户不输入另一个参数
- 使用一个参数的模板函数时出错(适用于 2)
- 仅当一个参数中未使用 std::function 时,模板函数替换才有效
- 如何在两个树通用的函数中创建一个参数?
- 使用带有一个参数函数的递归找到数字的平方
- 专门处理一个参数(C++模板)的两个模板参数
- 模板函数,其中一个参数需要专门化,而另一个不需要
- 如何更改参数包中的最后一个参数
- C++ 如何使用一个参数从派生类构造函数中调用具有两个参数的超类构造函数
- 模板参数重载,最后一个参数为非类型名
- 根据一个参数对数组进行排序
- 是否可以将指针传递给运算符,作为一个参数,例如指向函数的指针
- 用一个参数计数圆形链接列表中的节点
- 将数组作为一个参数从一个函数传递到C 中的另一个函数
- 将另一个参数传递给函子的库
- 分叉:使用一个参数运行 shell 时资源暂时不可用