我暴露了
C++ enum
到
Qt 5.7 QML
,就像书中描述的那样
this question
下面是类声明/实现:
#ifndef SPLASHSCREENLOGVIEWERMESSAGESTATUS_H
#define SPLASHSCREENLOGVIEWERMESSAGESTATUS_H
#include <QObject>
#include <QQmlEngine>
/**
* @class Enum class for splash screen log viewer message status
*/
class SplashScreenLogViewerMessageStatus : public QObject
{
Q_OBJECT
public:
/**
*! Splash screen log viewer message status enum
*/
enum messageStatus
{
STATUS_MESSAGE_LOADING=0x01, /*!< Message loading state */
STATUS_MESSAGE_LOAD_OK=0x02, /*!< Message load OK state */
STATUS_MESSAGE_LOAD_FAILED=0x03 /*!< Message load FAILED state */
};
Q_ENUM(messageStatus)
public:
/**
* @brief Constructor
*/
inline explicit SplashScreenLogViewerMessageStatus()
: QObject()
{
} // constructor
/**
* @brief QML type registration method
*/
inline static void registerQMLType()
{
qmlRegisterType<SplashScreenLogViewerMessageStatus>("com.example",
1,
0,
"SplashScreenLogViewerMessageType");
} // registerQMLType
}; // SplashScreenLogViewerMessageStatus (class)
#endif // SPLASHSCREENLOGVIEWERMESSAGESTATUS_H
我在下面的课堂上使用它:
#ifndef SPLASHSCREENLOGVIEWERMODELRECORD_H
#define SPLASHSCREENLOGVIEWERMODELRECORD_H
#include <QString>
#include "splashscreenlogviewermessagestatus.h"
/**
* @class Splash screen log viewer model record
*/
class SplashScreenLogViewerModelRecord
{
private:
/**
* @brief Message text
*/
QString messageText;
/**
* @brief Message status object
*/
SplashScreenLogViewerMessageStatus messageStatusObj;
public:
/**
* @brief Constructor
*/
SplashScreenLogViewerModelRecord();
/**
* @brief Constructor
*/
SplashScreenLogViewerModelRecord(const QString& messageText,
const SplashScreenLogViewerMessageStatus& messageStatusObj);
/**
* @brief Message text getter
* @return message text
*/
QString getMessageText() const;
/**
* @brief Message text setter
* @param text
*/
void setMessageText(const QString& text);
/**
* @brief Message status getter
* @return message status
*/
QString getMessageStatus() const;
/**
* @brief Message status setter
* @param status
*/
void setMessageStatus(const SplashScreenLogViewerMessageStatus& status);
};
#endif // SPLASHSCREENLOGVIEWERMODELRECORD_H
和实施:
#include "splashscreenlogviewermodelrecord.h"
SplashScreenLogViewerModelRecord::SplashScreenLogViewerModelRecord()
{
SplashScreenLogViewerMessageStatus messageStatus;
this->setMessageText(QString(""));
this->setMessageStatus(messageStatus);
} // constructor
QString SplashScreenLogViewerModelRecord::getMessageText() const
{
return this->messageText;
} // getMessageText
void SplashScreenLogViewerModelRecord::setMessageText(const QString& text)
{
this->messageText=text;
} // setMessageText
QString SplashScreenLogViewerModelRecord::getMessageStatus() const
{
if(this->messageStatusObj.messageStatus==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOADING)
{
return QString("Loading ...");
}
// else if(this->messageStatusObj.messageStatus==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOAD_OK)
// {
// return QString("Load OK.");
// }
// else if(this->messageStatusObj.messageStatus==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOAD_FAILED)
// {
// return QString("Load FAILED.");
// }
else
{
return QString("");
};
} // getMessageStatus
void SplashScreenLogViewerModelRecord::setMessageStatus(const SplashScreenLogViewerMessageStatus &status)
{
// this->messageStatus.SplashScreenLogViewerMessageStatusEnum=status.SplashScreenLogViewerMessageStatusEnum;
// this->messageStatus.messageStatus=status;
} // setMessageStatus
如果我试图用这些文件构建项目,我会遇到以下错误:
models/splashscreenlogviewermodelrecord.cpp: In member function âQString SplashScreenLogViewerModelRecord::getMessageStatus() constâ: models/splashscreenlogviewermodelrecord.cpp:23:31: error: invalid use of âenum SplashScreenLogViewerMessageStatus::messageStatusâ
if(this->messageStatusObj.messageStatus ==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOADING)
^~~~~~~~~~~~~ models/splashscreenlogviewermodelrecord.cpp:23:81: error: expected primary-expression before â.â token
if(this->messageStatusObj.messageStatus ==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOADING)
错误存在于方法中
QString SplashScreenLogViewerModelRecord::getMessageStatus() const
,特别是在第一行:
if(this->messageStatusObj.messageStatus==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOADING)
我该如何比较
enum
价值我在用
Qt Creator 4.9.2
在…上
Ubuntu 18.04.3 LTS 64bit
.