2017-05-23 2 views
0

Ich bin im Übergang von PyQt5 zu Qt5 in C++ und ich habe ein bisschen eine harte Zeit. Ich habe eine einfache Benutzeroberfläche erstellt, die ein Qwidget namens logo enthält. Ich versuche dies ein SVG zu machen Widget Widget mit diesem Code machen:Qt5 Widget Eigenschaften von UI

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

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

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

In Python, würde ich eine einfache Widget-Klasse erstellen, die die SVG dann in der Benutzeroberfläche Form Loader-Klasse macht ich

tun würde
self.logo = SVGRender(self) 

ich versuche, das gleiche in C++ Qt zu tun, also hier ist, was ich bisher habe, und es ist der Fehler zurückgegeben 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); 

} 

Kann mir jemand zeigen, was mache ich falsch?

Antwort

1

Die Variable ui.logo erfordert einen Zeiger des Objekts, es ändert sich in Ihrem Fall:

ui.logo = logoW(this); 

zu:

ui.logo = new logoW(this); 

ich auch, dass Sie verstehen, das Bild angezeigt werden soll in der Logo-Widget. Dazu müssen Sie die paintEvent Methode implementieren:

* .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); 
} 
+0

Welp, das Hinzufügen 'new' erlaubt es zu kompilieren und bearbeiten hat es funktioniert. Danke für deine Hilfe und jetzt weiß ich, was ich falsch gemacht habe. – aseylys

Verwandte Themen