天天看点

Qt [GC9-19]:液晶仪表整体框架调整

Qt [GC9-19]:液晶仪表整体框架调整
Qt [GC9-19]:液晶仪表整体框架调整

主窗口依旧采用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      
Qt [GC9-19]:液晶仪表整体框架调整

继续阅读