我正在使用C ++从PyQt5过渡到Qt5,而且我有一段艰难的时期。我创建了一个包含名为logo
的Qwidget的简单UI。我试图使用以下代码使这个小部件成为SVG渲染小部件:
QSvgRenderer renderer(QString(":/LogoSVG.svg"));
QImage image(500, 200, QImage::Format_ARGB32);
image.fill(0x000000);
QPainter painter(&image);
renderer.render(&painter);
在Python中,我创建了一个简单的窗口小部件类,然后在UI窗体中呈现SVG,我会做
self.logo = SVGRender(self)
我试图在C ++ Qt中做同样的事情,所以这是我到目前为止所做的并且它返回了错误error: cannot convert ‘logoW’ to ‘QWidget*’ in assignment
example.h文件
#ifndef EXAMPLE_H
#define EXAMPLE_H
#include "ui_example.h"
class example : public QWidget
{
Q_OBJECT
public:
example(QWidget *parent = 0);
private:
Ui::example ui;
};
class logoW: public QWidget
{
Q_OBJECT
public:
logoW(QWidget *parent = 0);
};
#endif
example.cpp
#include <QtGui>
#include <QScreen>
#include <QApplication>
#include <QDesktopWidget>
#include <QCoreApplication>
#include <QSvgRenderer>
#include <QPainter>
#include <QImage>
#include <iostream>
#include "example.h"
using namespace std;
example::example(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
ui.logo = logoW(this)
}
logoW :: logoW(QWidget * parent = 0){
QSvgRenderer renderer(QString(":resources/LogoSvg.svg"));
QImage image(500, 200, QImage::Format_ARGB32);
image.fill(0xaaA08080);
QPainter painter(&image);
renderer.render(&painter);
}
有人能告诉我我做错了什么吗?
答案 0 :(得分:1)
变量ui.logo需要一个对象的指针,在你的情况下它会改变:
ui.logo = logoW(this);
为:
ui.logo = new logoW(this);
我也了解您要在徽标小部件中显示图像。为此,您必须实施paintEvent
方法:
<强> *的.h 强>
class logoW: public QWidget
{
Q_OBJECT
public:
logoW(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent *event);
};
<强> *。CPP 强>
logoW::logoW(QWidget *parent):QWidget(parent)
{
}
void logoW::paintEvent(QPaintEvent *event){
Q_UNUSED(event)
QSvgRenderer renderer(QString(":resources/LogoSvg.svg"));
QPainter painter(this);
renderer.render(&painter);
}