主窗口依旧采用QWidget,在此基础上加一层背景层,如果背景简单,那就是使用QLabel,如果构造复杂则采用QWisget,在上面就是我比较喜欢的方式,QTabWidget,每个模式占用一个Tab,别说三个了,三十个也是可以的,哈哈哈。
这中实现方式也不是啥问题都没有,目前能想到的呢就是,TabWidget的画面切换动画,这个不知有没有,如果没有,可能就需要手动实现了。遇到了再说……
升级后的框架,就是原本的界面变成了一个子控件放在了TabWidget的Tab上面。把原来为主窗口绘制内容迁移至子控件中,并开放先关接口设计。
这里又会衍生出一个问题来,那就是我们的参数问题。液晶仪表上面的参数会有很多,但是怎么把这些参数通过控制台给他们呢,如果一个一个的给,会有多个接口,并且调用麻烦,如果把所有参数打包成一个结构体,那么当我修改其中一个参数的时候,其他参数就要发送给界面,这样会不会增加计算机的负担了。
目前我才用的但是单个参数。
附上调整后的代码,由于没有新的技术问题,这里只是简单附上头文件。
子控件
#ifndef MD_COMFORT_H
#define MD_COMFORT_H
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
namespace Ui {
class MD_Comfort;
}
class MD_Comfort : public QWidget
{
Q_OBJECT
public:
explicit MD_Comfort(QWidget *parent = 0);
~MD_Comfort();
void set_MDC_RotateSpeed(int rotateSpeed);
void set_MDC_CarSpeed(int carSpeed);
protected:
/*
* 事件过滤器
*/
bool eventFilter(QObject *watched, QEvent *event);
/*
* 绘制转速表
*/
void draw_RotatetSpeed(int rotateSpeed);
/*
* 绘制转速
*/
void draw_CarSpeed(int carSpeed);
private:
Ui::MD_Comfort *ui;
int m_RotateSpeed = 0; //转速
int m_CarSpeed = 0; //车速
};
#endif // MD_COMFORT_H
主液晶显示面板
#ifndef METERDISPLAY_H
#define METERDISPLAY_H
#include <QWidget>
#include <QMouseEvent>
#include <QKeyEvent>
#include "md_comfort.h"
namespace Ui {
class MeterDisplay;
}
class MeterDisplay : public QWidget
{
Q_OBJECT
public:
explicit MeterDisplay(QWidget *parent = 0);
~MeterDisplay();
void set_MD_RotateSpeed(int rotateSpeed);
void set_MD_CarSpeed(int carSpeed);
private:
/*
* 鼠标按下事件
*/
void mousePressEvent(QMouseEvent *event);
/*
* 鼠标移动事件
*/
void mouseMoveEvent(QMouseEvent *event);
/*
* 鼠标松开事件
*/
void mouseReleaseEvent(QMouseEvent *event);
/*
* 键盘事件
*/
void keyReleaseEvent(QKeyEvent *event);
private:
Ui::MeterDisplay *ui;
MD_Comfort *md_Comfort = NULL; //舒适界面UI
};
#endif // METERDISPLAY_H