Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在qt表单设计器中的小部件中显示两个不同的类_C++_Qt_Qt5_Qt Designer - Fatal编程技术网

C++ 如何在qt表单设计器中的小部件中显示两个不同的类

C++ 如何在qt表单设计器中的小部件中显示两个不同的类,c++,qt,qt5,qt-designer,C++,Qt,Qt5,Qt Designer,我有一个表单,上面有两个小部件。我想使用QSVGrender在每个小部件中显示不同的svg图像。我有两个不同的类可以显示svg图像,但是当我将这两个类升级到两个小部件时,我得到了这个错误-> 但是,如果我只将一个类升级到一个小部件,或者将同一个类升级到两个小部件,那么一切都正常了,我不会出错。这就好像第二类人杀了另一类人。但我不明白我到底做错了什么 显示图表.h: #ifndef DISPLAYWIDGET_H #define DISPLAYWIDGET_H #include <QCo

我有一个表单,上面有两个小部件。我想使用QSVGrender在每个小部件中显示不同的svg图像。我有两个不同的类可以显示svg图像,但是当我将这两个类升级到两个小部件时,我得到了这个错误->

但是,如果我只将一个类升级到一个小部件,或者将同一个类升级到两个小部件,那么一切都正常了,我不会出错。这就好像第二类人杀了另一类人。但我不明白我到底做错了什么

显示图表.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
#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.现在按预期工作。