gpt4 book ai didi

c++ - Qt C++ : Static list of font families

转载 作者:行者123 更新时间:2023-11-30 04:34:36 35 4
gpt4 key购买 nike

这可能更像是一个一般的 C++ 编程问题,而不是特定于 Qt 的问题。我遇到的问题是静态成员和初始化它们。

我有一个继承了 QAbstractTableModel 的表模型类,我希望每个类都有一个使用 QFontDatabase::families() 的所有系统字体系列的列表。我试图使这个家庭列表成为静态的,这样它只被填充一次。做这个的最好方式是什么?我无法理解如何初始化列表,因为它是静态的。这是我的意思的一个例子:


class Model : public QAbstractTableModel
{
public:
Model();
protected:
static QStringList fontFamilies;
}

Model::Model() : QAbstractTableModel(0)
{
fontFamilies = QFontDatabase().families();
}

我认为我不应该在构造函数中进行初始化(而且我实际上还没有尝试过上面的代码来查看编译器会说什么),但我不确定如何处理这个问题。我觉得我做不到


QStringList Model::fontFamilies = QFontDatabase().families();

如果您能提供任何帮助,谢谢!

最佳答案

静态变量的非平凡初始化通常是有问题的。您为初始化调用的函数可能取决于当时尚未初始化的资源。而且您无法控制首先初始化什么静态的顺序。

使用构造函数不是一个坏主意。您只需要确保只初始化静态变量一次:

Model::Model() : QAbstractTableModel(0)
{
if(fontFamilies.isEmpty())
fontFamilies = QFontDatabase().families();
}

或者不使用静态成员变量,而是使用带有静态局部变量的访问函数。只有在调用函数时才会分配和初始化静态本地。它很可能在 Qt 库初始化之后:

const QStringList & Model::fontFamilies()
{
static QStringList fm = QFontDatabase().families();
return fm;
}

关于c++ - Qt C++ : Static list of font families,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877530/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com