如何将 QGraphicView 提升为 .ui 文件中的自定义小部件?
How to promote QGraphicView to custom widget in .ui file?
我需要创建自己的小部件 class 并将其放置在图形形式 (.ui) 上。为了实现这一点,我从qt交付附带的示例中借用了这个 class:
#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 and this article。
在 ui class 中生成了我的小部件的来源:
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));
我的头文件包含在上面class:
#include <chartview.h>
//...
ChartView *graphicsView_6;
//...
class Ui_Form
{
public:
但是使用 build 我得到以下错误:
Cannot convert argument 'QWidget *' to 'QtCharts :: QChart *'
如何解决?
正如您在 ChartView class 构造函数中所写的那样,
ChartView 需要将 QChart
作为其父级。当您尝试推广它时,您没有将 QChart 设置为 ChartView 的父级。所以没有显示。
第二个错误是您选择了 QWidget 并试图将图表视图提升到它,选择一个 GraphicsView 项目而不是 QWidget.
但是你不应该通过推广来添加你的图表。
我需要创建自己的小部件 class 并将其放置在图形形式 (.ui) 上。为了实现这一点,我从qt交付附带的示例中借用了这个 class:
#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 and this article。
在 ui class 中生成了我的小部件的来源:
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));
我的头文件包含在上面class:
#include <chartview.h>
//...
ChartView *graphicsView_6;
//...
class Ui_Form
{
public:
但是使用 build 我得到以下错误:
Cannot convert argument 'QWidget *' to 'QtCharts :: QChart *'
如何解决?
正如您在 ChartView class 构造函数中所写的那样,
ChartView 需要将 QChart
作为其父级。当您尝试推广它时,您没有将 QChart 设置为 ChartView 的父级。所以没有显示。
第二个错误是您选择了 QWidget 并试图将图表视图提升到它,选择一个 GraphicsView 项目而不是 QWidget.
但是你不应该通过推广来添加你的图表。