【问题标题】:Qt5 Widget Properties from UIUI 中的 Qt5 小部件属性
【发布时间】:2017-05-23 00:39:29
【问题描述】:

我正在使用 C++ 从 PyQt5 过渡到 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 中,我会创建一个简单的小部件类来呈现 SVG,然后在 UI 表单加载器类中我会这样做

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

}

谁能告诉我我做错了什么?

【问题讨论】:

    标签: c++ qt qt5 qwidget


    【解决方案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);
    }
    

    【讨论】:

    • Welp,添加new 允许它编译并且您的编辑使它工作。谢谢你的帮助,现在我知道我做错了什么。
    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多