簡體   English   中英

如何在Qt Form Designer中的小部件中顯示兩個不同的類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM