如何将 QGraphicsView 提升为 .ui 文件中的自定义小部件?

Posted

技术标签:

【中文标题】如何将 QGraphicsView 提升为 .ui 文件中的自定义小部件?【英文标题】:How to promote QGraphicView to custom widget in .ui file? 【发布时间】:2021-10-18 16:44:09 【问题描述】:

我需要创建自己的小部件类并将其放置在图形表单 (.ui) 上。为了实现这一点,我借用了 qt 传递这个类附带的示例:

#ifndef CHARTVIEW_H
#define CHARTVIEW_H

#include <QChartView>
#include <QtWidgets/QRubberBand>

QT_CHARTS_USE_NAMESPACE

//![1]
class ChartView : public QChartView
//![1]  

public:
    ChartView(QChart *chart, QWidget *parent = 0);

//![2]
protected:
    bool viewportEvent(QEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void keyPressEvent(QKeyEvent *event);
//![2]

private:
    bool m_isTouching;
;

#endif

之后我检查了this answer 和this article。

在 ui 类中为我的小部件生成了源代码:

graphicsView_5 = new QChartView(page_5);
    graphicsView_5->setObjectName(QString::fromUtf8("graphicsView_5"));
    graphicsView_5->setGeometry(QRect(9, 9, 256, 192));
    pushButton_5 = new QPushButton(page_5);
    pushButton_5->setObjectName(QString::fromUtf8("pushButton_5"));
    pushButton_5->setGeometry(QRect(903, 264, 80, 21));
    graphicsView_6 = new ChartView(page_5);
    graphicsView_6->setObjectName(QString::fromUtf8("graphicsView_6"));
    graphicsView_6->setGeometry(QRect(470, 240, 256, 192));

我的头文件包含在上面的类中:

#include <chartview.h>
//...
ChartView *graphicsView_6;
//...
class Ui_Form

public:

但是构建我得到以下错误:

Cannot convert argument 'QWidget *' to 'QtCharts :: QChart *'

如何解决?

【问题讨论】:

ChartView 还是 QGraphicsView? 【参考方案1】:

当您在 ChartView 类构造函数中编写时, ChartView 需要将QChart 作为其父级。当您尝试推广它时,您没有将 QChart 设置为 ChartView 的父级。所以它没有显示。

第二个错误是您选择了 QWidget 并且您试图将图表视图提升到它,选择一个 GraphicsView 项目而不是 QWidget

但您不应该通过宣传来添加图表。

【讨论】:

以上是关于如何将 QGraphicsView 提升为 .ui 文件中的自定义小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将场景添加到先前定义的 QGraphicsView

QStackedWidget 将 QActions 连接到 QWidget 的自定义 QGraphicsView

如何在 QGraphicsView 中重置比例?

如何使用复选框更改 QGraphicsView 背景

如何在 QT 中的 QgraphicsView 中保持图像原始

QGraphicsView 啥都不显示