QGraphicsSvgItem:没有那个文件或目录
QGraphicsSvgItem: No such file or directory
我想创建一个飞机高度指示器并将其嵌入 PyQt5。
我找到了一个 GitHub 存储库,其中包含使用 cpp 构建的自定义高度指示器。下面是 link 到 github 仓库。
https://github.com/marek-cel/QFlightinstruments
文末有视频教程。我按照他所遵循的确切步骤进行了操作。但是当我 运行 它时,我得到了以下错误。
"In file included from ..\Instruments\qfi\qfi_AI.cpp:23:
../Instruments/qfi/qfi_AI.h:28:10:fatal error: QGraphicsSvgItem: No such file or directory"
qfi_EADI.h、qfi_EHSI.h 和 qfi_HI.h 也显示相同的错误。
我已经包含头文件并将以下行添加到我的 .pro 文件
QT += core gui svg
下面是我的 qfi_AI.h 文件(.h 和 cpp 文件可以在 github 中找到)
#ifndef QFI_AI_H
#define QFI_AI_H
////////////////////////////////////////////////////////////////////////////////
#include <QGraphicsView>
#include <QGraphicsSvgItem> //error
////////////////////////////////////////////////////////////////////////////////
/**
* @brief Attitude Indicator widget class.
*/
class qfi_AI : public QGraphicsView
{
Q_OBJECT
public:
/** Constructor. */
explicit qfi_AI( QWidget *parent = Q_NULLPTR );
/** Destructor. */
virtual ~qfi_AI();
/** Reinitiates widget. */
void reinit();
/** Refreshes (redraws) widget. */
void redraw();
/** @param roll angle [deg] */
void setRoll( double roll );
/** @param pitch angle [deg] */
void setPitch( double pitch );
protected:
/** */
void resizeEvent( QResizeEvent *event );
private:
QGraphicsScene *_scene;
QGraphicsSvgItem *_itemBack;
QGraphicsSvgItem *_itemFace;
QGraphicsSvgItem *_itemRing;
QGraphicsSvgItem *_itemCase;
double _roll;
double _pitch;
double _faceDeltaX_new;
double _faceDeltaX_old;
double _faceDeltaY_new;
double _faceDeltaY_old;
double _scaleX;
double _scaleY;
const int _originalHeight;
const int _originalWidth;
const double _originalPixPerDeg;
QPointF _originalAdiCtr;
const int _backZ;
const int _faceZ;
const int _ringZ;
const int _caseZ;
void init();
void reset();
void updateView();
};
////////////////////////////////////////////////////////////////////////////////
#endif //QFI_AI_H
如何解决这个问题?
QGraphicsSvgItem
继承了QGraphicsObject
,需要包含widgets。因此,在您的 .pro 文件中包含 QT += widgets
。
在 Qt6 中,许多子模块已经重组,例如 QGraphicsSvgItem 和 QSvgWidget 类 被移动到一个名为 svgwidgets 的新子模块,这样 svg 子模块不再依赖于 widgets 子模块,这提高了应用程序中的内存不需要小部件。
所以解决方案是添加:
QT += svgwidgets
在the docs中明确指出:
我想创建一个飞机高度指示器并将其嵌入 PyQt5。
我找到了一个 GitHub 存储库,其中包含使用 cpp 构建的自定义高度指示器。下面是 link 到 github 仓库。
https://github.com/marek-cel/QFlightinstruments
文末有视频教程。我按照他所遵循的确切步骤进行了操作。但是当我 运行 它时,我得到了以下错误。
"In file included from ..\Instruments\qfi\qfi_AI.cpp:23:
../Instruments/qfi/qfi_AI.h:28:10:fatal error: QGraphicsSvgItem: No such file or directory"
qfi_EADI.h、qfi_EHSI.h 和 qfi_HI.h 也显示相同的错误。
我已经包含头文件并将以下行添加到我的 .pro 文件
QT += core gui svg
下面是我的 qfi_AI.h 文件(.h 和 cpp 文件可以在 github 中找到)
#ifndef QFI_AI_H
#define QFI_AI_H
////////////////////////////////////////////////////////////////////////////////
#include <QGraphicsView>
#include <QGraphicsSvgItem> //error
////////////////////////////////////////////////////////////////////////////////
/**
* @brief Attitude Indicator widget class.
*/
class qfi_AI : public QGraphicsView
{
Q_OBJECT
public:
/** Constructor. */
explicit qfi_AI( QWidget *parent = Q_NULLPTR );
/** Destructor. */
virtual ~qfi_AI();
/** Reinitiates widget. */
void reinit();
/** Refreshes (redraws) widget. */
void redraw();
/** @param roll angle [deg] */
void setRoll( double roll );
/** @param pitch angle [deg] */
void setPitch( double pitch );
protected:
/** */
void resizeEvent( QResizeEvent *event );
private:
QGraphicsScene *_scene;
QGraphicsSvgItem *_itemBack;
QGraphicsSvgItem *_itemFace;
QGraphicsSvgItem *_itemRing;
QGraphicsSvgItem *_itemCase;
double _roll;
double _pitch;
double _faceDeltaX_new;
double _faceDeltaX_old;
double _faceDeltaY_new;
double _faceDeltaY_old;
double _scaleX;
double _scaleY;
const int _originalHeight;
const int _originalWidth;
const double _originalPixPerDeg;
QPointF _originalAdiCtr;
const int _backZ;
const int _faceZ;
const int _ringZ;
const int _caseZ;
void init();
void reset();
void updateView();
};
////////////////////////////////////////////////////////////////////////////////
#endif //QFI_AI_H
如何解决这个问题?
QGraphicsSvgItem
继承了QGraphicsObject
,需要包含widgets。因此,在您的 .pro 文件中包含 QT += widgets
。
在 Qt6 中,许多子模块已经重组,例如 QGraphicsSvgItem 和 QSvgWidget 类 被移动到一个名为 svgwidgets 的新子模块,这样 svg 子模块不再依赖于 widgets 子模块,这提高了应用程序中的内存不需要小部件。
所以解决方案是添加:
QT += svgwidgets
在the docs中明确指出: