[英]How to display two different classes in a widgets in qt form designer
我有一個帶有兩個小部件的表單。 我想使用QSvgRenderer在每個小部件中顯示不同的svg圖像。 我有兩個不同的類可以顯示svg圖像,但是一旦我將兩個類都升級到兩個小部件,就會出現此錯誤->
但是,如果我僅將一個類提升為一個小部件,或者將同一類提升為兩個小部件,則一切正常,我不會出錯。 就像以某種方式殺死了第二類。 但是我不明白我到底在做什么錯。
displaychart.h :
#ifndef DISPLAYWIDGET_H
#define DISPLAYWIDGET_H
#include <QColor>
#include <QHash>
#include <QWidget>
//! [DisplayWidget class definition]
class displaychart : public QWidget
{
Q_OBJECT
public:
displaychart(QWidget *parent = 0);
void paint(QPainter &painter);
public slots:
protected:
void paintEvent(QPaintEvent *event) override;
private:
};
#endif
和displaychart.cpp:
#include <QtWidgets>
#include "displaychart.h"
#include <QSvgRenderer>
displaychart::displaychart(QWidget *parent)
: QWidget(parent)
{
}
void displaychart::paintEvent(QPaintEvent * /* event */)
{
//Create qpainter object
QPainter painter(this);
// file location main wheel in qstring
QString svgFile = "/home/arjan/qtprojects/astro/AstroQt/svg/natalwheel.svg";
// create svg object
QSvgRenderer svgr(svgFile);
// Render paint object
svgr.render(&painter);
// end paint
painter.end();
}
另一個類是完全相同的。 僅函數名和文件名被重命名。
displayaspect.h:
#ifndef DISPLAYWIDGET_H
#define DISPLAYWIDGET_H
#include <QColor>
#include <QHash>
#include <QWidget>
//! [DisplayWidget class definition]
class displayaspect : public QWidget
{
Q_OBJECT
public:
displayaspect(QWidget *parent = 0);
void paint(QPainter &painter);
public slots:
protected:
void paintEvent(QPaintEvent *event) override;
private:
};
#endif
和displayaspect.cpp :
#include <QtWidgets>
#include "displayaspect.h"
#include <QSvgRenderer>
displayaspect::displayaspect(QWidget *parent)
: QWidget(parent)
{
}
void displayaspect::paintEvent(QPaintEvent * /* event */)
{
//Create qpainter object
QPainter painter(this);
// file location main wheel in qstring
QString svgFile = "/home/arjan/qtprojects/astro/AstroQt/svg/natalaspect.svg";
// create svg object
QSvgRenderer svgr(svgFile);
// Render paint object
svgr.render(&painter);
// end paint
painter.end();
}
您的問題很可能是displaychart.h
文件的包含保護。
嘗試更改以下內容...
#ifndef DISPLAYWIDGET_H
#define DISPLAYWIDGET_H
...變成
#ifndef DISPLAYCHART_H
#define DISPLAYCHART_H
通過在兩個文件中都具有相同的include防護,可以有效地防止編譯器看到第二個類,從而導致您看到的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.