制作有道词典——标题栏

简介: 制作有道词典——标题栏

在前面的分享中,小豆君已经对样式表的知识介绍的差不多了,我们接下来的几节分享中,小豆君和大家一起制作一个有道词典主界面,以巩固下样式表的用法,最后还会分享如何有效的组织样式表代码。


今天先制作标题栏。


下图是原版的有道界面:

01ebd755782e4c909dad0843d3544acf.jpeg


新建项目YouDaoWidget,类名为YouDaoWidget,并且继承自QWidget。

ui界面为(标题栏的具体画法在下方):

01ebd755782e4c909dad0843d3544acf.jpeg


1 去掉系统的标题栏

01ebd755782e4c909dad0843d3544acf.jpeg


系统给我们提供的标准标题栏有时并不能满足需求,或是并不美观,所以需要自定义一个标题栏。

在构造函数中添加如下代码,去掉标题栏


//去掉标题栏
setWindowFlags(Qt::FramelessWindowHint);


2 编辑自定义的标题栏界面

01ebd755782e4c909dad0843d3544acf.jpeg


标题栏最外层,即所有小控件的父控件为QFrame,下表是一个对应关系。


标题栏最外层,即所有小控件的父控件为QFrame,下表是一个对应关系。

序号类名对象名称说明父控件QFrameframe_title最外层控件


其中的搜索框比较复杂,所以把它单独拎出来,制作一个搜索框类。

01ebd755782e4c909dad0843d3544acf.jpeg

3 创建搜索框界面类

添加新的ui类SearchEdit,继承自QWidget。

ui界面:

01ebd755782e4c909dad0843d3544acf.jpeg

头文件searchedit.h

#ifndef SEARCHEDIT_H
#define SEARCHEDIT_H
#include <QFrame>
namespace Ui {
class SearchEdit;
}
class SearchEdit : public QFrame
{
    Q_OBJECT
public:
    explicit SearchEdit(QWidget *parent = 0);
    ~SearchEdit();
private:
    void init();
private:
    Ui::SearchEdit *ui;
};
#endif // SEARCHEDIT_H


源文件seachedit.cpp

#include "searchedit.h"
#include "ui_searchedit.h"
SearchEdit::SearchEdit(QWidget *parent) :
    QFrame(parent),
    ui(new Ui::SearchEdit)
{
    ui->setupUi(this);
    init();
}
SearchEdit::~SearchEdit()
{
    delete ui;
}
void SearchEdit::init()
{
    //1. 设置查询edit
    ui->line_search->setStyleSheet("border:none;");
    //2. 设置左右侧半圆
    ui->label_left->setStyleSheet("QLabel{"
                                  "border-image:url(:image/input-left.png);"
                                  "}");
    ui->label_right->setStyleSheet("QLabel{"
                                   "border-image:url(:image/input-rightt.png);"
                                   "}");
    //3. 设置翻译模式 英汉互译
    ui->label_model->setStyleSheet("QLabel{background:white;color:gray;}\
                                    QLabel:hover{color:rgb(244, 76, 76);}");
    //4. 设置竖直线
    ui->label_vline->setStyleSheet("QLabel{"
                                   "background-color:white;color:gray;"
                                   "}");
    //5. 设置向下按钮
    ui->btn_drop->setStyleSheet("QPushButton{"
                                "border:none;background-color:white;"
                                "}");
    //6. 设置查询按钮
    ui->btn_search->setStyleSheet("QPushButton{"
                                  "border:none;background-color:white;"
                                  "}");
}


4 初始化标题栏

在YouDaoWidget类中添加私有函数void initTitleBar();并在构造函数中调用此函数。

下面是initTitleBar()的代码:

void YouDaoWidget::initTitleBar()
{
    //1. 设置标题栏的背景颜色为红色
    //在样式表中,#号可以指定要设置的控件对象名,
    //从而指定该设置只影响该控件本身,其子控件不会继承其样式
    //如果不指定,则其子控件会继承其样式
    ui->frame_title->setStyleSheet(
        "QFrame#frame_title{background-color:rgb(244, 76, 76);}");
    //2. 设置Logo
    //border-image属性会使得图片占满整个控件,因此图片会缩放
    ui->label_logo->setStyleSheet(
         "QLabel{border-image:url(:/image/logo.png);}");
    //3.  设置向前前进按钮
    //hover-表示鼠标悬停状态
    //disabled-表示控件不可用状态
    ui->btn_pre->setStyleSheet(
       "QPushButton{border-image:url(:/image/prev.png);} \
        QPushButton:hover{border-image:url(:/image/prev-hover.png);} \
        QPushButton:disabled{border-image:url(:/image/prev-disabled.png);}");
    //3. 设置向后按钮
    ui->btn_next->setStyleSheet(
        "QPushButton{border-image:url(:/image/next.png);} \
        QPushButton:hover{border-image:url(:/image/next-hover.png);} \
        QPushButton:disabled{border-image:url(:/image/next-disabled.png);}");
    //4. 设置历史按钮
    ui->btn_history->setStyleSheet(
        "QPushButton{border-image:url(:/image/history.png);} \
         QPushButton:hover{border-image:url(:/image/history-hover.png);}");
    //5. 设置登录按钮
    ui->btn_login->setStyleSheet(
         "QPushButton{border-image:url(:/image/default-portrait.png);}");
    //6. 设置mini按钮
    ui->btn_mini->setStyleSheet(
         "QPushButton{border-image:url(:/image/mini.png);}\
          QPushButton:hover{border-image:url(:/image/mini-hover.png);}");
    //7. 设置最小化按钮
    ui->btn_min->setStyleSheet(
         "QPushButton{border-image:url(:/image/minimum.png);}\
          QPushButton:hover{border-image:url(:/image/minimum-hover.png);}");
    //8. 设置最大化按钮
    ui->btn_max->setStyleSheet(
          "QPushButton{border-image:url(:/image/maximum.png);}\
          QPushButton:hover{border-image:url(:/image/maximum-hover.png);}");
    //9. 设置关闭按钮
    ui->btn_close->setStyleSheet(
         "QPushButton{border-image:url(:/image/close.png);}\
          QPushButton:hover{border-image:url(:/image/close-hover.png);}");
}


现在直接编译运行程序,效果和原版还差不多嘛。

01ebd755782e4c909dad0843d3544acf.jpeg


好的,有道词典的标题栏就做好了,下节分享导航栏的制作,我们下节再见,最后不要忘记点赞哦。


关于本节的源码,可以关注公众号:小豆君Qt分享,申请加入C++\Qt交流群获得。

相关文章
|
关系型数据库 MySQL 数据库
MySQL系列(二)之CRUD(增删改查)操作
MySQL系列(二)之CRUD(增删改查)操作
|
JavaScript API
本地开发环境请求服务器接口跨域的问题(vue的问题)
本地开发环境请求服务器接口跨域的问题(vue的问题)
571 0
|
10月前
|
网络协议 NoSQL 安全
FreeBSD 13.5 正式版发布 - 高性能开源 Unix 系统
FreeBSD 13.5 正式版发布 - 高性能开源 Unix 系统
191 1
FreeBSD 13.5 正式版发布 - 高性能开源 Unix 系统
|
11月前
|
图形学
unity 物体震动
在Unity中实现物体震动效果,主要通过改变物体的位置、旋转或缩放属性来模拟震动。以下是位置震动的实现原理及代码示例:通过随机生成微小偏移量并累加到物体位置上,在短时间内不断改变位置产生震动效果。生成随机偏移,并结合时间控制持续震动。
|
SQL 存储 NoSQL
数据库技术详解:从基础到进阶,掌握数据处理的核心
一、引言 在数字化时代,数据已成为企业的核心资产
|
监控 网络协议 网络安全
|
异构计算
zTasker v1.88.1一键定时自动化任务
zTasker是一款完全免费支持定时、热键或条件触发的方式执行多种自动化任务的小工具,支持win7-11。其支持超过100种任务类型,50+种定时/条件执行方法,而且任务列表可以随意编辑、排列、移动、更改类型,支持任务执行日志,可覆盖win自带的热键,同时支持任务列表等数据的备份及自动更新等。
359 3
|
存储 缓存 人工智能
解码 LangChain|用 LangChain 和 Milvus 从零搭建 LLM 应用
如何从零搭建一个 LLM 应用?不妨试试 LangChain + Milvus 的组合拳。 作为开发 LLM 应用的框架,LangChain 内部不仅包含诸多模块,而且支持外部集成;Milvus 同样可以支持诸多 LLM 集成,二者结合除了可以轻松搭建一个 LLM 应用,还可以起到强化 ChatGPT 功能和效率的作用。
1553 0
|
Web App开发 Java 测试技术
SAP OData 编程指南
SAP OData 编程指南
|
监控 测试技术 Apache
性能测试:方法、工具与最佳实践
性能测试:方法、工具与最佳实践
1145 0