C++ 如何在qt表单设计器中的小部件中显示两个不同的类
我有一个表单,上面有两个小部件。我想使用QSVGrender在每个小部件中显示不同的svg图像。我有两个不同的类可以显示svg图像,但是当我将这两个类升级到两个小部件时,我得到了这个错误-> 但是,如果我只将一个类升级到一个小部件,或者将同一个类升级到两个小部件,那么一切都正常了,我不会出错。这就好像第二类人杀了另一类人。但我不明白我到底做错了什么 显示图表.h:C++ 如何在qt表单设计器中的小部件中显示两个不同的类,c++,qt,qt5,qt-designer,C++,Qt,Qt5,Qt Designer,我有一个表单,上面有两个小部件。我想使用QSVGrender在每个小部件中显示不同的svg图像。我有两个不同的类可以显示svg图像,但是当我将这两个类升级到两个小部件时,我得到了这个错误-> 但是,如果我只将一个类升级到一个小部件,或者将同一个类升级到两个小部件,那么一切都正常了,我不会出错。这就好像第二类人杀了另一类人。但我不明白我到底做错了什么 显示图表.h: #ifndef DISPLAYWIDGET_H #define DISPLAYWIDGET_H #include <QCo
#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
#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();
}
\ifndef DISPLAYWIDGET\u H
#定义DISPLAYWIDGET\u H
#包括
#包括
#包括
//! [DisplayWidget类定义]
类displaychart:公共QWidget
{
Q_对象
公众:
显示图表(QWidget*parent=0);
空漆(油漆工和油漆工);
公众时段:
受保护的:
作废paintEvent(QPaintEvent*事件)覆盖;
私人:
};
#恩迪夫
和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();
}
#包括
#包括“displaychart.h”
#包括
displaychart::displaychart(QWidget*父项)
:QWidget(父项)
{
}
void displaychart::paintEvent(QPaintEvent*/*event*/)
{
//创建QPaint对象
油漆工(本);
//qstring中的文件位置主控制盘
QString svgFile=“/home/arjan/qtprojects/astro/AstroQt/svg/natalwheel.svg”;
//创建svg对象
QSVGrender svgr(svgFile);
//渲染绘制对象
高级渲染(和油漆工);
//端漆
结束();
}
另一类完全相同。仅重命名函数名和文件名
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
\ifndef DISPLAYWIDGET\u H
#定义DISPLAYWIDGET\u H
#包括
#包括
#包括
//! [DisplayWidget类定义]
类displayaspect:公共QWidget
{
Q_对象
公众:
displayaspect(QWidget*parent=0);
空漆(油漆工和油漆工);
公众时段:
受保护的:
作废paintEvent(QPaintEvent*事件)覆盖;
私人:
};
#恩迪夫
和displayaspect.cpp:
#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
#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();
}
#包括
#包括“displayaspect.h”
#包括
displayaspect::displayaspect(QWidget*父项)
:QWidget(父项)
{
}
void displayaspect::paintEvent(QPaintEvent*/*event*/)
{
//创建QPaint对象
油漆工(本);
//qstring中的文件位置主控制盘
QString svgFile=“/home/arjan/qtprojects/astro/AstroQt/svg/natalaspect.svg”;
//创建svg对象
QSVGrender svgr(svgFile);
//渲染绘制对象
高级渲染(和油漆工);
//端漆
结束();
}
您的问题很可能是displaychart.h
文件的include保护
尝试更改以下内容
#ifndef DISPLAYWIDGET_H
#define DISPLAYWIDGET_H
…进入
#ifndef DISPLAYCHART_H
#define DISPLAYCHART_H
通过在两个文件中使用相同的include-guard,可以有效地防止编译器看到第二个类,这将导致您看到的错误。共享.ui…..Thanx!已经找了好几个小时了。。。结果表明,两个头文件都需要不同的名称。DISPLAYCHART_H和DISPLAYASPECT_H.现在按预期工作。