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);
复制代码
}
复制代码
复制代码
相关推荐
微风中的麦穗5 小时前
【MATLAB】MATLAB R2025a 详细下载安装图文指南:下一代科学计算与工程仿真平台
开发语言·matlab·开发工具·工程仿真·matlab r2025a·matlab r2025·科学计算与工程仿真
2601_949146535 小时前
C语言语音通知API示例代码:基于标准C的语音接口开发与底层调用实践
c语言·开发语言
开源技术5 小时前
Python Pillow 优化,打开和保存速度最快提高14倍
开发语言·python·pillow
学嵌入式的小杨同学5 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
mftang7 小时前
Python 字符串拼接成字节详解
开发语言·python
四维碎片7 小时前
【Qt】UDP跨平台调试工具
qt·学习·udp
jasligea7 小时前
构建个人智能助手
开发语言·python·自然语言处理
kokunka7 小时前
【源码+注释】纯C++小游戏开发之射击小球游戏
开发语言·c++·游戏
踏过山河,踏过海8 小时前
【用ui文件做个简单工具的开发,为什么修改完ui后,程序重新编译运行后,GUI界面还是不变呢?】
qt·ui
云栖梦泽8 小时前
易语言开发从入门到精通:补充篇·网络编程进阶+实用爬虫开发·API集成·代理IP配置·异步请求·防封禁优化
开发语言