当前位置: 首页 > ai >正文

P7 QT项目----会学天气预报

7.1 项目概述
·stylesheet 界面美化
·Json 数据解析
·HTTP 通信
·自定义控件绘制温度
·多控件
·代码整合调试能力
7.2 stylesheet 样式
设置边框弧度
border-radius: 4px;
设置某方向边框弧度
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
设置背景颜色
background-color: rgb(60, 60, 60, 100);
父控件影响
父控件指定某类控件的样式,子控件都要遵守此样式进行显示,除非子控件内部有做相关修改
QLabel {
        background-color: rgba(0, 200, 200, 200);
        border-radius: 4px;
}
7.3 窗体无状态栏 - 关闭
设置无状态栏
setWindowFlag ( Qt::FramelessWindowHint );
设置右键弹窗关闭功能
menuQuit = new QMenu(this);
QAction *closeAct = new QAction(QIcon(":/res/close.png"), tr("退出"), this);
menuQuit->addAction(closeAct);
connect(menuQuit,&QMenu::triggered,this,[=]{
        this->close();
});
void Widget::mousePressEvent(QMouseEvent *event)
{
        if(event->button() == Qt::RightButton){
        //qDebug() << "right Mouse clicked!";
                menuQuit->exec(QCursor::pos());
        }
}
7.4 窗口跟随移动
代码实现
void Widget::mousePressEvent(QMouseEvent *event)
{
        if(event->button() == Qt::RightButton){
                //qDebug() << "right Mouse clicked!";
                menuQuit->exec(QCursor::pos());
        }
        //鼠标当前位置 event->globalPos();,
        //窗口当前位置 this->pos()窗口新位置event->globalPos() - mOffset
        if(event->button() == Qt::LeftButton){
                // qDebug() << event->globalPos() << this->pos();
                mOffset = event->globalPos()-this->pos();
        }
}
//鼠标左键按下后的移动,导致这个事件被调用,设置窗口的新位置
void Widget::mouseMoveEvent(QMouseEvent *event)
{
        this->move(event->globalPos() - mOffset);
}
实现的逻辑
1.当有鼠标按下的时候,获得蓝色那段偏移量
2.当我鼠标拖动的时候,根据偏移量,算出新窗口的位置
部分代码
#include "widget.h"
#include "ui_widget.h"
 
#include <QDebug>
 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
 
    //窗体无状态栏
    setWindowFlag(Qt::FramelessWindowHint);
 
    //界面跟随
    this->setLayout(ui->verticalLayout);
 
    //QMenu菜单组件
    menuQuit = new QMenu(this);
    //设置菜单项文字颜色
    menuQuit->setStyleSheet("QMenu::item{color : red}");
    //用户点击菜单项并点击后回调函数,推出程序
    connect(menuQuit,&QMenu::triggered,[=](){
        this->close();
    });
}
 
Widget::~Widget()
{
    delete ui;
}
 
/* 鼠标按下触发事件 */
void Widget::mousePressEvent(QMouseEvent *event)
{
    //鼠标右键按下
    if(event->button() == Qt::RightButton){
        qDebug() << "Rigght button clicked!";
        //显示推出窗口
        menuQuit->addAction(QIcon(":/res/close.png"),"退出");
        //窗口出现在鼠标的位置
        menuQuit->exec(QCursor::pos());
    }
 
    //鼠标左键按下
    if(event->button() == Qt::LeftButton){
        qDebug() << "Left button clicked!";
        //获取鼠标的位置,界面左上角的位置
        qDebug() << event->globalPos() << this->pos();
        //偏移量:鼠标位置与界面左上角的位置的差
        mOffset = event->globalPos() - this->pos();
    }
}
 
/* 鼠标拖动移动界面 */
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    //减去偏移量会更湿滑,不然鼠标会跑到界面左上角的位置
    this->move(event->globalPos() - mOffset);
}
 
 
http://www.xdnf.cn/news/14474.html

相关文章:

  • 黑马python(八)
  • 设置环境变量(linux,windows,windows用指令和用界面)
  • AntV G6入门教程
  • CppCon 2017 学习:C++ in Academia
  • 【开源解析】基于Python+Qt打造智能应用时长统计工具 - 你的数字生活分析师
  • 鼎捷T100开发语言-Genero FGL 终极技术手册
  • Mac OS上安装Redis
  • Python 正则表达式
  • 解决戴尔电脑No bootable devices found问题
  • TIA Portal (博图) 中 SCL 语言 REPEAT_UNTIL循环语句的用法介绍及案例
  • 资源占用多,Linux 系统中如何降低 CPU 资源消耗并提升利用率?
  • CentOS 7 虚拟机网络配置异常 典型问题:启动了NetworkManager但是network无法启动
  • 03.【C语言学习笔记】分支和循环
  • 网络层协议 IP 协议介绍 -- IP 协议,网段划分,私有 IP 和 公网 IP,路由
  • 设计模式笔记_创建型_单例模式
  • 【图像处理入门】9. 基础项目实战:从去噪到图像加密
  • 接口适配器模式实现令牌桶算法和漏桶算法
  • 加密、加签、摘要算法对比
  • 自然语言处理【NLP】—— CBOW模型
  • 浅谈快排的退化与优化
  • 鼠标报告描述符与对应的数据结构体
  • 实现汽车焊装线设备互联:DeviceNet与Modbus TCP协议转换网关
  • Debian 编译安装 ruby3.2
  • stm32使用定时器PWM
  • Linux编程:4、进程通信-管道(匿名管道)
  • 二手商城系统+SpringBoot + Vue (前后端分离)
  • 通用embedding模型和通用reranker模型,观测调研
  • 嵌入式学习笔记C语言阶段--17共用体和枚举
  • LG P4278 带插入区间K小值 Solution
  • SCADA|KingSCADA通过组合框选择修改变量的值