2

プロジェクトを 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:
*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()));
                                                                                        ^
4

1 に答える 1