QT桌面的构建

简介: QT桌面的构建

前言

本篇文章开始我将带大家构建一个属于自己的QT桌面,这个桌面将适用于ARM和Linux等。


一、按键类的创建

首先我们需要创建一个按键类,这个按键类需要包含一个按键和一个lable用来显示按键的名字。

效果如下:

这个就是我们桌面的APP图标了,图标设计可以去阿里的图标库里面找。之前串口的文章中已经带大家使用过这个图标库了,这里就不多说了。

57075997178c4ed5ac354f3e55d41a49.png

新建一个APPButton的类:19252f220a7a42619256e7c6bd50ee3c.png

21bbe2f663844b4fbc837cea2b879ffc.png

二、按键样式设计

这里我们需要设置按键的样式让他更加符合APP按键的样式。在QT中普通的按键是四四方方的形状,但是你仔细去观察我们手机上的APP按键会发现他是圆角的,所以这里我们需要来将按键的样式设置为无边框,圆角的样式,这样更加符合我们的习惯。


这里我们使用QPushButton中的setStyleSheet函数来设置按键样式,将他设置为无边框,圆角,默认为白色背景。

/*设置按键的样式*/
/*无边框,圆角,默认为白色背景*/
m_button.setStyleSheet("QPushButton {\
                         border: none;\
                         border-radius: 10px;\
                         background-color: white;\
                         color: white;\
                         text-align: center;\
                     }"
                   );

这里还需要设置一个按键按下的样式,当我们按下按键的时候会触发一个样式代表我们按下了这个按键。

按键按下后将按键设置为灰色,用来区分按键按下和松开的状态。

m_button.setStyleSheet("QPushButton {\
                            background-color: grey;\
                            border: none;\
                            border-radius: 10px;\
                            color: white;\
                            text-align: center;\
                        }");

三、详细代码讲解

这个APPButton类其实就是继承于QWidget的。

普通的按键的文字显示只能显示在按键中,无法将文字显示在按键的下方,所以这里需要QLabel创建一个label来显示按键名字。

APPButton.h

#ifndef APPBUTTON_H
#define APPBUTTON_H
#include <QWidget>
#include <QPushButton>
#include <QIcon>
#include <QLabel>
class APPButton : public QWidget
{
    Q_OBJECT
    QPushButton m_button;
    QLabel m_label;
public:
    explicit APPButton(QString name, QWidget *parent = nullptr);
    void SetAppButtonSize(int High, int width);
    void SetIcon(QString IconPath);
protected slots:
    void button_pressed();
    void button_released();
signals:
    void pressed();
    void released();
public slots:
};
#endif // APPBUTTON_H

APPButton.c

使用垂直布局管理器将按键和标签布局在一起。

这里主要就是要处理按键的按下和送开,当按键按下或者松开的时候会发送我们预先定义好的信号,这样处理主要就是为了能让外部来处理这个按下的信号,内部只做一些按键样式的切换。

#include "APPButton.h"
#include <QVBoxLayout>
#include <QPoint>
#include <QDebug>
APPButton::APPButton(QString name, QWidget *parent) : QWidget(parent),
m_button(this), m_label(this)
{
    /*设置按键的样式*/
    /*无边框,圆角,默认为白色背景*/
    m_button.setStyleSheet("QPushButton {\
                                border: none;\
                                border-radius: 10px;\
                                background-color: white;\
                                color: white;\
                                text-align: center;\
                            }"
                          );
    /*设置图标名字*/
    m_label.setText(name);
    /*使用垂直布局管理器将按键和名字放在居中的位置*/
    QVBoxLayout* Vlayout = new QVBoxLayout(this);
    Vlayout->addWidget(&m_button, 3, Qt::AlignCenter);
    Vlayout->addWidget(&m_label, 1, Qt::AlignCenter);
    Vlayout->setSpacing(1);
    /*连接按键的按下和松开的槽函数*/
    connect(&m_button, SIGNAL(pressed()), this, SLOT(button_pressed()));
    connect(&m_button, SIGNAL(released()), this, SLOT(button_released()));
}
/*设置按键图标函数*/
void APPButton::SetIcon(QString IconPath)
{
    //设置图标
    m_button.setIcon(QIcon(IconPath));
    // 图标自适应大小
    m_button.setIconSize(m_button.size());
    // 设置自适应大小策略
    m_button.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
}
/*设置按键大小和名字大小*/
void APPButton::SetAppButtonSize(int High, int width)
{
    setFixedSize(High, width);
    // 设置为固定大小,防止被布局管理器改变
    m_button.setFixedSize(High*3/5, width*3/5);
    m_label.resize(High*1/5, width*1/5);
}
/*按下按键槽函数*/
void APPButton::button_pressed()
{
    emit pressed();/*发送按下信号让外部处理*/
    m_button.setStyleSheet("QPushButton {\
                                background-color: grey;\
                                border: none;\
                                border-radius: 10px;\
                                color: white;\
                                text-align: center;\
                            }");
}
/*松开按键槽函数*/
void APPButton::button_released()
{
    emit released();/*发送松开信号让外部处理*/
    m_button.setStyleSheet("QPushButton {\
                                background-color: white;\
                                border: none;\
                                border-radius: 10px;\
                                color: white;\
                                text-align: center;\
                            }");
}

使用:

APPButton* appbutton = new APPButton("LED", this);
appbutton->SetAppButtonSize(100, 100);
appbutton->SetIcon(":/LED.png");
appbutton->move(500, 100);
connect(appbutton, SIGNAL(pressed()), this, SLOT(button_pressed()));
connect(appbutton, SIGNAL(released()), this, SLOT(button_released()));

总结

本篇文章就讲解到这里,我们已经迈出了第一步构建好了自己的APP图标了。

相关文章
|
7月前
|
C++
基于Qt的简易桌面日历设计与实现
基于Qt的简易桌面日历设计与实现
301 1
|
7月前
|
开发框架 Linux API
Qt:构建高效且用户友好的跨平台应用
Qt:构建高效且用户友好的跨平台应用
|
计算机视觉
Qt实用技巧:实现不规则窗口的鼠标消息穿透,包括穿透到桌面和穿透到父窗口
Qt实用技巧:实现不规则窗口的鼠标消息穿透,包括穿透到桌面和穿透到父窗口
|
7月前
|
开发框架 自然语言处理 Linux
Qt:构建强大跨平台应用程序的框架
Qt:构建强大跨平台应用程序的框架
|
6月前
Cmake构建Qt项目链接glog库
Cmake构建Qt项目链接glog库
|
7月前
|
编译器 C++ Windows
QT5构建套件检测不到MSVC2017解决方法
QT5构建套件检测不到MSVC2017解决方法
712 0
|
7月前
|
安全 Linux 网络安全
Qt SSL/TLS 安全通信类:构建安全网络应用的关键组件
Qt SSL/TLS 安全通信类:构建安全网络应用的关键组件
274 0
|
7月前
|
监控 网络安全 C++
Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器
Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器
496 0
QT桌面项目(日历程序)
QT桌面项目(日历程序)
121 0
QT桌面项目(状态栏和导航栏设置)
QT桌面项目(状态栏和导航栏设置)
256 0