正确使用静态函数以返回QList <qobject *>

时间:2019-03-01 12:52:30

标签: c++ qt static qobject qlist

我是Qt(以及C ++)的新手,我不想问一个愚蠢的问题,但是这是为了找出最佳用法(我可能在此方面不见了)点)。我的代码的想法如下:

  • 拥有可以随时调用的静态函数
  • 此函数的想法是返回QList<QObject*>
  • Logic不应存储数据,相反,该函数将根据文件内容创建此列表(以及内部对象),并将其存储在由代码的不同部分创建的列表中< / li>

例如:

logic.h

#ifndef LOGIC_H
#define LOGIC_H

#include <QObject>
#include <QDebug>
#include <QUrl>

class Disk : public QObject {
    Q_OBJECT
    Q_PROPERTY(QString diskUuid READ diskUuid WRITE setDiskUuid NOTIFY diskUuidChanged)
    Q_PROPERTY(ulong diskSizeBytes READ diskSizeBytes WRITE setDiskSizeBytes NOTIFY diskSizeBytesChanged)

public:
    Disk (QObject *parent=nullptr);
    Disk (const QString &diskUuid,
                 const ulong &diskSizeBytes,
                 QObject *parent=nullptr);

    QString diskUuid() const;
    ulong diskSizeBytes() const;
    void setDiskUuid(const QString &diskUuid);
    void setDiskSizeBytes (const ulong &diskSizeBytes);

signals:
    void diskUuidChanged();
    void diskSizeBytesChanged();

private:
    QString m_diskUuid;
    ulong m_diskSizeBytes;
};

class Logic : public QObject {
    Q_OBJECT
public:
    explicit Logic(QObject *parent = nullptr);
    ~Logic();
    static QList<Disk*> buildDiskList(QUrl fileUrl);
};

#endif // LOGIC_H

logic.cpp

#include "logic.h"

Disk::Disk(QObject *parent)
    : QObject(parent)
{

}

Disk::Disk(const QString &diskUuid,
                           const ulong &diskSizeBytes,
                           QObject *parent):QObject(parent),m_diskUuid(diskUuid),m_diskSizeBytes(diskSizeBytes)
{

}

Logic::Logic(QObject *parent) : QObject(parent) {

}

Logic::~Logic() {

}

QString Disk::diskUuid() const{
    return m_diskUuid;
}

ulong Disk::diskSizeBytes() const{
    return m_diskSizeBytes;
}

void Disk::setDiskUuid(const QString &diskUuid){
    if (diskUuid != m_diskUuid) {
        m_diskUuid = diskUuid;
        emit diskUuidChanged();
    }
}

void Disk::setDiskSizeBytes(const ulong &diskSizeBytes){
    if (diskSizeBytes != m_diskSizeBytes) {
        m_diskSizeBytes = diskSizeBytes;
        emit diskSizeBytesChanged();
    }
}

QList<Disk*> buildDiskList(QUrl fileUrl) {
    QList<Disk*> list;
    list.append(new Disk("",0));
    return list;
}

但是,当我尝试在代码的另一部分(在另一个.cpp的空白内)执行类似操作时,如下所示:

QList<Disk*> list;
list = Logic::buildDiskList(logUrl);

chaos.obj:-1: error: LNK2019: unresolved external symbol "public: static class QList<class Disk *> __cdecl Logic::buildDiskList(class QUrl)" (?buildDiskList@Logic@@SA?AV?$QList@PEAVDisk@@@@VQUrl@@@Z) referenced in function "public: void __cdecl LogsModel::appendLogs(class QString,class QList<class QUrl>)" (?appendLogs@LogsModel@@QEAAXVQString@@V?$QList@VQUrl@@@@@Z)
release\clc.exe:-1: error:
LNK1120: 1 unresolved externals

好像我做错了。有没有办法做这样的事情,还是我需要为Logic类显式创建对象?预先感谢!

0 个答案:

没有答案