【问题标题】:How to display two different classes in a widgets in qt form designer如何在 qt 表单设计器的小部件中显示两个不同的类
【发布时间】: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


【解决方案1】:

您的问题很可能是 displaychart.h 文件的包含保护。

尝试更改以下内容...

#ifndef DISPLAYWIDGET_H
#define DISPLAYWIDGET_H

...进入

#ifndef DISPLAYCHART_H
#define DISPLAYCHART_H

通过在两个文件中使用相同的包含保护,您可以有效地防止编译器看到第二个类,这会导致您看到的错误。

【讨论】:

  • 谢谢!一直在寻找几个小时的问题......原来这两个头文件都需要不同的名称。 DISPLAYCHART_H 和 DISPLAYASPECT_H。现在按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 2010-10-25
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多