基于QT的简单大数据可视化模板

一边做一边学一边摸索,终于基于QT的数据大屏展板有了雏形,如下图,欢迎大家关注我,之后会持续更新 。下面有全部代码,可以粘贴到自己的项目文档里慢慢研究 。
目前为止本项目的难点在于可停靠窗口的设计,自定义窗口标题栏 。
这个展板的小窗口应用,可以点击拖动出小窗口,并再嵌入主窗口中,也可以拖动,使他们互相交换位置 。
的自带标题栏不好看,所以我将原来的标题栏删除后,自定义了一个标题栏,并进行配色,字体设计,之后也可以在现在代码的基础上进行再创造 。
主窗口还可以继续添加可停靠窗口,几个小的可停靠窗口里面还可以继续布局新的控件 。
不足:目前该项目在运行之后,几个窗口的大小分配不太合适 。

基于QT的简单大数据可视化模板

文章插图
本项目文件结构:
Project工程文件xxx.pro头文件title_bar.hwidget.h源文件main.cpptitle_bar.cppwidget.cpp
【基于QT的简单大数据可视化模板】下面贴上代码:
xxx.pro
//在pro文件中只要在默认的情况下添加一行代码即可QT+=charts
.h
//这个文件和title_bar.cpp文件还可以进一步优化,欢迎大家在评论区讨论#ifndef TITLE_BAR#define TITLE_BAR#include class QLabel;class QPushButton;class TitleBar : public QWidget{Q_OBJECTpublic:explicit TitleBar(QWidget *parent = 0);~TitleBar();protected:// 双击标题栏进行界面的最大化/还原virtual void mouseDoubleClickEvent(QMouseEvent *event);// 进行鼠界面的拖动//virtual void mousePressEvent(QMouseEvent *event);// 设置界面标题与图标virtual bool eventFilter(QObject *obj, QEvent *event);private slots:// 进行最小化、最大化/还原、关闭操作//void onClicked();private:// 最大化/还原//void updateMaximize();private:QLabel *m_pIconLabel;QLabel *m_pTitleLabel;};#endif // TITLE_BAR
.h
#ifndef WIDGET_H#define WIDGET_H#include #include #include #include #include #include QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEQT_CHARTS_BEGIN_NAMESPACEclass QChartView;class QChart;QT_CHARTS_END_NAMESPACEQT_CHARTS_USE_NAMESPACE//此句必备class Widget : public QWidget{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;private:QChart *creatDonutChart() const;QChart *creatBarChart() const;QChart *creatLineChart() const;QChart *creatAreaChart() const;QDockWidget *pd1,*pd2,*pd3,*pd4;QMainWindow *pw;QWidget *pw1,*pw2;QDockWidget *m_titlebar(QDockWidget *pd,QWidget *m_chart,QString m_str) ;private://void mousePressEvent(QMouseEvent *e);//void mouseMoveEvent(QMouseEvent *e);//QPoint lastPos;};#endif // WIDGET_H
.cpp
#include #include #include #include #include #include #include "title_bar.h"#include TitleBar::TitleBar(QWidget *parent): QWidget(parent){setFixedHeight(30);m_pTitleLabel = new QLabel(this);m_pTitleLabel->setFixedHeight(30);m_pTitleLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);m_pTitleLabel->setObjectName("whiteLabel");m_pTitleLabel->setContentsMargins(0,0,0,0);m_pTitleLabel->setAlignment(Qt::AlignCenter);//设置字颜色QPalette pa;pa.setColor(QPalette::WindowText,Qt::white);m_pTitleLabel->setPalette(pa);//设置字号QFont ft("微软雅黑");ft.setPointSize(10);m_pTitleLabel->setFont(ft);QHBoxLayout *mainWidgetLayout = new QHBoxLayout(this);QWidget *mainWidget = new QWidget;QHBoxLayout *pLayout = new QHBoxLayout;mainWidgetLayout->addWidget(mainWidget);mainWidget->setLayout(pLayout);mainWidgetLayout->setMargin(0);pLayout->setContentsMargins(0,0,0,0);pLayout->setSpacing(0);mainWidget->setStyleSheet("QWidget{background-color:rgb(48, 48, 85);}");pLayout->addWidget(m_pTitleLabel);}TitleBar::~TitleBar(){}void TitleBar::mouseDoubleClickEvent(QMouseEvent *event){Q_UNUSED(event);event->ignore();}bool TitleBar::eventFilter(QObject *obj, QEvent *event){switch (event->type()){case QEvent::WindowTitleChange:{QWidget *pWidget = qobject_cast