【发布时间】:2016-05-23 13:14:21
【问题描述】:
我有一个Configuration,其中包含有关文件位置的一些基本信息,例如下载、安装、图片、音乐、文档等位置。
这些当前使用Q_PROPERTY 暴露于QML。它们都有自己的访问器:
Q_PROPERTY(QUrl download_location READ download_location WRITE set_download_location NOTIFY download_location_changed)
这些访问器基本上做所有相同的事情,我想摆脱我必须编写的所有这些冗余代码。
我的第一个想法是有一个小的嵌套类FileLocation,它提供了获取、设置和验证功能。但是,我如何将这些连接到Q_PROPERTY?
另外,如果我有类似带参数的静态函数(例如check_validity( QUrl location )),我将如何从 QML 端交出这个参数?
我认为我在这里走错了路,所以我的问题是如何将Q_PROPERTY 上下文中的冗余代码保持在合理的范围内,避免为非常相似的编写负载和负载的 get、set 和 changed 函数对象?
这里还有一些代码:
class Configuration : public QObject
{
QObject
Q_PROPERTY(QUrl download_location READ download_location WRITE set_download_location NOTIFY download_location_changed)
Q_PROPERTY(QUrl music_location READ music_location WRITE set_music_location NOTIFY music_location_changed)
...
signals:
void download_location_changed();
void music_location_changed();
...
public slots:
void set_download_location(QUrl location)
{
download_location = location;
emit download_location_changed(download_location);
}
void set_music_location(QUrl location)
{
music_location = location;
emit music_location_changed(music_location);
}
...
private:
QUrl download_location,
music_location,
...;
}
因此,正如您所见,有很多重复出现的代码都具有相同的功能,我想稍微缓和一下。我怎么做?我在考虑一些让成员工作的通用函数设置、获取、更改等是一个参数。但是后来我不知道如何从 qml 交出要处理的成员。
我刚刚发现了通过qmlRegisterType(...) 将 C++ 类公开给 qml 的可能性 - 也许这就是要走的路?
【问题讨论】:
-
你能发布更多代码吗?我很难看出问题出在哪里。
-
哪个代码是多余的?