来自 UI 的 Qt5 小部件属性

Qt5 Widget Properties from UI

我正在从 PyQt5 过渡到 C++ 中的 Qt5,我遇到了一些困难。我创建了一个简单的 UI,其中包含一个名为 logo 的 Qwidget。我正在尝试使用以下代码使此小部件成为 SVG 渲染小部件:

QSvgRenderer renderer(QString(":/LogoSVG.svg"));

QImage image(500, 200, QImage::Format_ARGB32);
image.fill(0x000000);

QPainter painter(&image);
renderer.render(&painter);

在 Python 中,我会创建一个简单的小部件 class 来呈现 SVG,然后在 UI 表单加载器中 class 我会做

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);

}

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

变量 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);
}