主窗口依旧采用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