C++ 访问在c+中的类的构造函数中创建的对象+;

C++ 访问在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

我有三份档案 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"
#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
是一个指针,而不是一个对象。我还看到有一个方法可以访问这个ponter
lnfList
。所以要访问指针,只需
logic.lnfList()

现在请记住,
lnfList
返回的是一个指针,因此,如果您想说重新加载列表(不管这意味着什么),它将是一个指针

logic.lnfList()->reload();
LnfListModel* ptr = logic.lnfList();
ptr->reload();