来自UI的Qt5小部件属性

时间:2017-05-23 00:39:29

标签: c++ qt qt5 qwidget

我正在使用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);

}

有人能告诉我我做错了什么吗?

1 个答案:

答案 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);
}