我是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类显式创建对象?预先感谢!