首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGraphicsSvgItem:没有这样的文件或目录

QGraphicsSvgItem:没有这样的文件或目录
EN

Stack Overflow用户
提问于 2021-09-10 07:42:25
回答 2查看 172关注 0票数 1

我想创建一个飞机高度指示器并将其嵌入到PyQt5中。

我发现了一个GitHub存储库,它有使用cpp构建的自定义高度指示器。下面是指向github存储库的链接。

https://github.com/marek-cel/QFlightinstruments

在最后有一个视频教程。我紧跟着他的脚步走。但是当我运行它时,我得到了以下错误。

代码语言:javascript
复制
"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文件中添加了以下行

代码语言:javascript
复制
QT  += core gui svg

下面是我的qfi_AI.h文件( .h和cpp文件可以在github中找到)

代码语言:javascript
复制
#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

如何解决此问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-17 17:16:19

在Qt6中,许多子模块都进行了重构,例如,QGraphicsSvgItem和QSvgWidget类被移动到一个名为svgwidgets的新子模块中,这样svg子模块就不再依赖于widgets子模块,从而提高了不需要小部件的应用程序的内存。

因此,解决方案是添加:

代码语言:javascript
复制
QT += svgwidgets

这在the docs中有明确的说明

票数 1
EN

Stack Overflow用户

发布于 2021-09-12 06:10:48

QGraphicsSvgItem继承了QGraphicsObject,这需要包含小部件。因此,在.pro文件中包含QT += widgets

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69128833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档