C++ 访问在c+中的类的构造函数中创建的对象+;
我有三份档案 main.cpp、lnflogic.cpp和listmodel.cpp 这是listlogic.cpp的构造函数 我在main.cpp中像这样实例化lnflogicC++ 访问在c+中的类的构造函数中创建的对象+;,c++,qt,constructor,kde,C++,Qt,Constructor,Kde,我有三份档案 main.cpp、lnflogic.cpp和listmodel.cpp 这是listlogic.cpp的构造函数 我在main.cpp中像这样实例化lnflogic LnfLogic logic; 我想访问m_lnflistmodel中一个名为themesinfo的类(它在其标题中创建为名为m_themes的QList) 调试时,我可以看到m_主题已经创建(如下图所示),如何访问它? 这是文件 LnfLogic.cpp #include "lnflogic.h&quo
LnfLogic logic;
我想访问m_lnflistmodel中一个名为themesinfo的类(它在其标题中创建为名为m_themes的QList)
调试时,我可以看到m_主题已经创建(如下图所示),如何访问它?
这是文件
LnfLogic.cpp
#include "lnflogic.h"
#include "lnflistmodel.h"
LnfLogic::LnfLogic()
: m_themeName(QStringLiteral("org.kde.breeze.desktop")),
m_lnfListModel(new LnfListModel(this)),
m_needsSave(false)
{
m_package = KPackage::PackageLoader::self()->loadPackage(QStringLiteral("Plasma/LookAndFeel"));
}
LnfLogic::~LnfLogic()
{
}
LnfListModel *LnfLogic::lnfList()
{
return m_lnfListModel;
}
**listmodel构造函数它有两个类:mesinfo和lnflistmodel**
#include "lnflistmodel.h"
LnfListModel::LnfListModel( QObject *parent )
: QAbstractListModel( parent )
{
m_roleNames.insert(Qt::DisplayRole, "displayRole");
m_roleNames.insert(PackageNameRole, "packageNameRole");
m_roleNames.insert(PackageDescriptionRole, "packageDescriptionRole");
m_roleNames.insert(PackageAuthorRole, "packageAuthorRole");
m_roleNames.insert(PackageVersionRole, "packageVersionRole");
reload();
}
LnfListModel::~LnfListModel()
{
clearThemeList();
}
这是listmodel的头文件
#ifndef LNFLISTMODEL_H
#define LNFLISTMODEL_H
#include <QAbstractItemView>
namespace Plasma
{
}
//Theme selector code by Andre Duffeck (modified to add package description)
//not sure if i would need this
class ThemeInfo
{
public:
QString name;
QString package;
QString description;
QString author;
QString version;
QString themeRoot;
};
class LnfListModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(int count READ count NOTIFY countChanged)
public:
enum { PackageNameRole = Qt::UserRole,
PackageDescriptionRole = Qt::UserRole + 1,
PackageAuthorRole = Qt::UserRole + 2,
PackageVersionRole = Qt::UserRole + 3
};
explicit LnfListModel(QObject *parent = nullptr);
~LnfListModel() override;
QHash<int, QByteArray> roleNames() const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QModelIndex indexOf(const QString &path) const;
bool themeExists(const QString &name) const;
void reload();
void clearThemeList();
int count() const
{
return rowCount();
}
Q_INVOKABLE QVariantMap get(int index) const;
Q_SIGNALS:
void countChanged();
private:
QHash<int, QByteArray> m_roleNames;
QList<ThemeInfo> m_themes;
};
\ifndef LNFLISTMODEL\u H
#定义LNFLISTMODEL_H
#包括
名称空间等离子体
{
}
//Andre Duffeck的主题选择器代码(修改为添加包描述)
//不知道我是否需要这个
分类主题信息
{
公众:
QString名称;
QString包;
QString描述;
QString作者;
QString版本;
QString themeRoot;
};
LnfListModel类:公共QAbstractListModel
{
Q_对象
Q_属性(整数计数读取计数通知计数已更改)
公众:
枚举{PackageNameRole=Qt::UserRole,
PackageDescriptionRole=Qt::UserRole+1,
PackageAuthorRole=Qt::UserRole+2,
PackageVersionRole=Qt::UserRole+3
};
显式LnfListModel(QObject*parent=nullptr);
~LnfListModel()覆盖;
QHash roleNames()常量重写;
int rowCount(const QModelIndex&parent=QModelIndex())常量重写;
QVariant数据(常量QModelIndex&index,int-role=Qt::DisplayRole)常量覆盖;
QModelIndex indexOf(常量QString&path)常量;
bool themeExists(const QString&name)const;
无效重新加载();
void clearThemeList();
int count()常量
{
返回rowCount();
}
Q_可调用的QVariantMap get(int index)const;
Q_信号:
void countChanged();
私人:
QHash m_roleNames;
QList m_主题;
};
lnflogic头文件
#define LNFLOGIC_H
#include <QAbstractListModel>
#include <kpackage/package.h>
class LnfListModel;
class LnfLogic : public QObject
{
Q_OBJECT
Q_PROPERTY(LnfListModel *lnfList READ lnfList CONSTANT)
Q_PROPERTY(QString theme READ theme WRITE setTheme NOTIFY themeChanged)
Q_PROPERTY(bool isWritable READ isWritable NOTIFY themeChanged)
Q_PROPERTY(QString themeFolder READ themeFolder NOTIFY themeChanged)
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
Q_PROPERTY(QString comment READ comment WRITE setComment NOTIFY commentChanged)
Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged)
Q_PROPERTY(QString email READ email WRITE setEmail NOTIFY emailChanged)
Q_PROPERTY(QString version READ version WRITE setVersion NOTIFY versionChanged)
Q_PROPERTY(QString website READ website WRITE setWebsite NOTIFY websiteChanged)
Q_PROPERTY(QString license READ license WRITE setLicense NOTIFY licenseChanged)
Q_PROPERTY(QString thumbnailPath READ thumbnailPath NOTIFY themeChanged)
Q_PROPERTY(bool performLayoutDump READ performLayoutDump WRITE setPerformLayoutDump NOTIFY performLayoutDumpChanged)
Q_PROPERTY(bool performDefaultsDump READ performDefaultsDump WRITE setPerformDefaultsDump NOTIFY performDefaultsDumpChanged)
Q_PROPERTY(bool needsSave READ needsSave NOTIFY needsSaveChanged)
public:
enum ErrorLevel
{
Info,
Error
};
Q_ENUMS(ErrorLevel)
LnfLogic();
~LnfLogic() override;
LnfListModel *lnfList();
bool themeExists(const QString &plugin);
void setTheme(const QString &theme);
QString theme() const;
bool isWritable() const;
QString themeFolder() const;
QString name() const;
void setName(const QString &name);
QString comment() const;
void setComment(const QString &comment);
QString author() const;
void setAuthor(const QString &author);
QString email() const;
void setEmail(const QString &email);
QString version() const;
void setVersion(const QString &version);
QString website() const;
void setWebsite(const QString &website);
QString license() const;
void setLicense(const QString &license);
bool performLayoutDump() const;
void setPerformLayoutDump(bool dump);
bool performDefaultsDump() const;
void setPerformDefaultsDump(bool dump);
QString thumbnailPath() const;
void dumpPlasmaLayout(const QString &pluginName);
bool needsSave();
Q_INVOKABLE void save();
Q_INVOKABLE void createNewTheme(const QString &pluginName, const QString &name, const QString &comment, const QString &author, const QString &email, const QString &license, const QString &website);
Q_INVOKABLE void processThumbnail(const QString &path);
Q_INVOKABLE QString openFile();
void dumpCurrentPlasmaLayout();
void dumpDefaultsConfigFile(const QString &pluginName);
Q_SIGNALS:
void themeChanged();
void messageRequested(ErrorLevel level, const QString &message);
void needsSaveChanged();
void nameChanged();
void commentChanged();
void authorChanged();
void emailChanged();
void versionChanged();
void websiteChanged();
void licenseChanged();
void performLayoutDumpChanged();
void performDefaultsDumpChanged();
private:
QString m_themeName;
KPackage::Package m_package;
LnfListModel *m_lnfListModel;
QHash<QString, QString> m_tempMetadata;
bool m_performLayoutDump : 1;
bool m_performDefaultsDump : 1;
bool m_needsSave;
};
#endif // LNFLOGIC_H
#定义逻辑
#包括
#包括
LnfListModel类;
类逻辑:公共QoObject
{
Q_对象
Q_属性(LnfListModel*lnfList读取lnfList常量)
Q_属性(QString主题读取主题写入设置主题通知主题更改)
Q_属性(bool可写读取可写通知他们更改)
Q_属性(Q字符串文件夹读取文件夹通知文件夹更改)
Q_属性(QString名称读取名称写入集合名称通知名称更改)
Q_属性(QString注释读取注释写入设置注释通知注释更改)
Q_属性(QString author READ author WRITE setAuthor NOTIFY author changed)
Q_属性(QString电子邮件读取电子邮件写入设置电子邮件通知电子邮件更改)
Q_属性(QString版本读取版本写入设置版本通知版本更改)
Q_属性(QString网站读取网站写入设置网站通知网站更改)
Q_属性(QString许可证读取许可证写入设置许可证通知许可证更改)
Q_属性(QString thumbnailPath读取thumbnailPath通知更改)
Q_属性(bool performlayoutump READ performlayoutump WRITE setperformlayoutump NOTIFY performlayoutumpchanged)
Q_属性(布尔performDefaultsDump读取performDefaultsDump写入设置performDefaultsDump通知performDefaultsDump已更改)
Q_属性(bool needsSave READ needsSave NOTIFY needsSaveChanged)
公众:
枚举错误级别
{
信息,
错误
};
Q_枚举(错误级别)
LnfLogic();
~LnfLogic()覆盖;
LnfListModel*lnfList();
bool themeExists(常量QString和插件);
void setTheme(const QString&theme);
QString主题()常量;
bool是可写的()常量;
QString themeFolder()常量;
QString name()常量;
void setName(常量QString&name);
QString comment()常量;
void setComment(常量QString和comment);
QString author()常量;
void setAuthor(const QString和author);
QString电子邮件()常量;
作废setEmail(常量字符串和电子邮件);
QString version()常量;
无效设置版本(常量字符串和版本);
QString网站()const;
void setWebsite(const QString&website);
QString许可证()常量;
作废setLicense(const QString&license);
bool performLayoutDump()常量;
void setPerformLayoutDump(布尔转储);
bool performDefaultsDump()常量;
作废setPerformDefaultsDump(布尔转储);
QString thumbnailPath()常量;
无效转储Plasmalayout(常量QString和pluginName);
bool needsSave();
Q_可调用的void save();
Q_可调用的void createNewTheme(const QString&pluginName、const QString&name、const QString&comment、const QString&author、const QString&email、const QString&license、const QString&website);
Q_可调用的void进程缩略图(const QString&path);
Q_可调用的QString openFile();
void dumpCurrentPlasmaLayout();
void dumpDefaultsConfigFile(常量QString和pluginName);
Q_信号:
使机械更改无效();
请求的无效消息(错误级别、常量字符串和消息);
void needsSaveChanged();
void nameChanged();
void commentChanged();
void authorChanged();
void emailChanged();
void versionChanged();
作废网站已更改();
无效许可证更改();
void performLayoutDumpChanged();
void performDefaultsDumpChanged();
私人:
QString m_themeName;
KPackage::包m_包;
LnfListModel*m_LnfListModel;
QHash m_;
布尔m_性能布局转储:1;
布尔m_performDefaultsDump:1;
布尔穆尼索夫;
};
#endif//LNFLOGIC_H
现在我可以看到头文件了,我看到m_lnfListModel
是一个指针,而不是一个对象。我还看到有一个方法可以访问这个ponterlnfList
。所以要访问指针,只需logic.lnfList()
现在请记住,lnfList
返回的是一个指针,因此,如果您想说重新加载列表(不管这意味着什么),它将是一个指针
logic.lnfList()->reload();
LnfListModel* ptr = logic.lnfList();
ptr->reload();