【发布时间】:2020-03-22 08:07:26
【问题描述】:
我有一个带有两个小部件的表单。我想使用 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
并显示chart.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();
}
【问题讨论】:
-
分享.ui.....
标签: c++ qt qt5 qt-designer