我正在将一个项目从 Qt 4.x 迁移到 5,并且有一个包含以下属性的类:
Qt::PenStyle penStyle;
及其各自的get函数:
Qt::PenStyle getPenStyle() {return penStyle;}
我得到一个编译错误说
error: 'QVariant::QVariant(Qt::PenStyle)' is private
QVariant(Qt::PenStyle) Q_DECL_EQ_DELETE;
^
..\marssies\painterbar.cpp:217:88: error: within this context
lineStyle -> setCurrentIndex(lineStyle -> findData(graphicObject->getPenStyle()));
^
做了一些研究,我发现了这一点:
QVariant:
*Inconsistent 构造函数采用 Qt::GlobalColor 并产生 QVariant(QColor) 实例已被删除。可以通过显式调用 QColor 构造函数来迁移构建此类变体的代码。例如从“QVariant(Qt::red)”到“QVariant(QColor(Qt::red))*类似地,从枚举值 Qt::BrushStyle、Qt::PenStyle 和 Qt::CursorShape 隐式创建 QVariants 已被删除。显式创建对象或使用 static_cast(Qt::SolidLine) 创建与枚举具有相同值的 int 类型的 QVariant。
问题是,如果我不能像那样做 Qt::PenStyle,我应该如何声明属性/函数?显式创建对象是什么意思?我已经尝试过像引用所说的那样做一些事情,但我没有设法解决它。我确实设法解决了其他类似的错误,但它们都不是属性或函数的声明。
完整错误:
In file included from ..\..\..\..\..\Qt5\5.2.1\mingw48_32\include\QtCore/qsettings.h:46:0,
from ..\..\..\..\..\Qt5\5.2.1\mingw48_32\include\QtCore/QSettings:1,
from ..\marssies\appcommon.h:10,
from ..\marssies\painterbar.h:5,
from ..\marssies\painterbar.cpp:1:
..\..\..\..\..\Qt5\5.2.1\mingw48_32\include/QtCore/qvariant.h: In member function 'void PainterBar::setGraphicObject(GraphicsPrimitive*, PainterBar::FinishMode)':
..\..\..\..\..\Qt5\5.2.1\mingw48_32\include/QtCore/qvariant.h:482:5: error: 'QVariant::QVariant(Qt::PenStyle)' is private
QVariant(Qt::PenStyle) Q_DECL_EQ_DELETE;
^
..\marssies\painterbar.cpp:217:88: error: within this context
lineStyle -> setCurrentIndex(lineStyle -> findData(graphicObject->getPenStyle()));
^