小编use*_*342的帖子

在QT中自定义看svg GUI小部件,性能非常糟糕

所以我正在尝试为吉他效果程序制作一个gui.一个目标是允许其他人设计svg"皮肤"来定制外观.我创建了继承每个小部件(即qdial)的小部件,并在初始化程序中将皮肤指定的svg文件加载到qGraphicsSvgItem中.这被放入场景和视图中,我重载了调整大小并重新适当地重新绘制.这有效.

当我将几个这些自定义svg小部件(5个拨号,一个按钮和一个led)加载到父小部件中时,cpu rails和我的程序冻结.我完全是错误的做法吗?我应该使用QT吗?这似乎比尝试用样式表做所有事情更容易(特别是我无法弄清楚如何改变表盘外观).将小部件保留为qGraphicsSvgItems并将它们全部放入父窗口小部件的场景和视图中会改进吗?

这是一个实时信号处理程序,所以我不想在GUI中烧掉很多cpu.我试图对它进行一些研究但是找不到svg的很多东西.我也没有在qtCreator中看到任何性能检查器,或者我试着看看瓶颈是什么.无论如何,在我花更多时间尝试以错误的方式做事之前,我真的很感激你能给出的任何建议.

非常感谢!_ssj71

ps以下是svg小部件的一些代码(希望足够):

#ifndef QSVGDIAL_H
#define QSVGDIAL_H

#include <QWidget>
#include <QDial>
#include <QtSvg/QSvgRenderer>
#include <QtSvg/QGraphicsSvgItem>
#include <QGraphicsView>
#include <QGraphicsScene>

class qSVGDial : public QDial
{
    Q_OBJECT

public:
    explicit qSVGDial(QWidget *parent = 0);
    explicit qSVGDial(QString knobFile = "defaultKnob.svg", QString needleFile = "defaultNeedle.svg", QWidget *parent = 0);
    ~qSVGDial();

private:
    void paintEvent(QPaintEvent *pe);
    void resizeEvent(QResizeEvent *re);
    float degPerPos;
    float middle;
    float mysize;
    QGraphicsView view;
    QGraphicsScene scene;
    QGraphicsSvgItem *knob;
    QGraphicsSvgItem *needle;
    QSize k,n;

};

#endif // QSVGDIAL_H
Run Code Online (Sandbox Code Playgroud)

cpp:

#include "qsvgdial.h"
#include …
Run Code Online (Sandbox Code Playgroud)

c++ performance user-interface svg qt4

3
推荐指数
1
解决办法
2809
查看次数

标签 统计

c++ ×1

performance ×1

qt4 ×1

svg ×1

user-interface ×1