所以我正在尝试为吉他效果程序制作一个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)