QT界面开发-(特效)无边框窗口+背景图片

转发自邵发《C/C++系列教程》Qt界面开发 https://chuanke.baidu.com/4509752-209060.html

1.自己用代码画界面

2.用Laber控件放一张背景大图

hpp

 1 #include <QtWidgets>
 2
 3
 4 private:
 5     virtual void paintEvent(QPaintEvent *event);
 6
 7     virtual void mouseMoveEvent(QMouseEvent * event);
 8     virtual void mousePressEvent(QMouseEvent * event);
 9     virtual void mouseReleaseEvent(QMouseEvent * event);
10
11     QPixmap m_imgTitle;
12
13     bool m_dragging; // 是否正在拖动
14     QPoint m_startPosition; // 拖动开始前的鼠标位置
15     QPoint m_framePosition; // 窗体的原始位置

cpp

 1 //写在ui.setupUi(this);下面
 2     m_dragging = false;
 3
 4     // 不显示标题栏(亦无边框)
 5     setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
 6
 7     // 背景透明(全自画)
 8     setAttribute(Qt::WA_TranslucentBackground);
 9
10     // 标题图片
11     m_imgTitle.load(":/Resources/title-bg.jpg");
12
13
14
15 void TestAandB::paintEvent(QPaintEvent *event)
16 {
17     QPainter painter(this);
18     QRect frameRect = rect();
19     frameRect.adjust(1, 1, -1, -1);
20
21     // 自画背景和边框
22     painter.setPen(QColor(0x66, 0x66, 0x66));
23     painter.setBrush(QColor(0xFF, 0xFF, 0xFF));
24     painter.drawRoundRect(frameRect, 2, 2);
25
26     // 画标题栏
27     QRect titleRect = frameRect;
28     titleRect.setBottom(frameRect.top() + 80);
29
30     QPainterPath path;
31     path.addRoundedRect(frameRect.adjusted(1, 1, 0, -1), 2, 2);
32     path.intersects(titleRect);
33     painter.setClipPath(path);
34     painter.drawPixmap(titleRect, m_imgTitle);
35
36 }
37
38 void TestAandB::mousePressEvent(QMouseEvent *event)
39 {
40     // 只响应左键
41     if (event->button() == Qt::LeftButton)
42     {
43         QRect titleRect = rect();
44         titleRect.setBottom(titleRect.top() + 80);
45
46         if (titleRect.contains(event->pos()))
47         {
48             m_dragging = true;
49             m_startPosition = event->globalPos();
50             m_framePosition = frameGeometry().topLeft();
51         }
52     }
53
54     QWidget::mousePressEvent(event);
55 }
56
57 void TestAandB::mouseMoveEvent(QMouseEvent *event)
58 {
59     // 只响应左键
60     if (event->buttons() & Qt::LeftButton)
61     {
62         if (m_dragging)
63         {
64             // delta 相对偏移量,
65             QPoint delta = event->globalPos() - m_startPosition;
66
67             // 新位置:窗体原始位置  + 偏移量
68             move(m_framePosition + delta);
69         }
70     }
71
72     QWidget::mouseMoveEvent(event);
73 }
74
75 void TestAandB::mouseReleaseEvent(QMouseEvent * event)
76 {
77     m_dragging = false;
78     QWidget::mouseReleaseEvent(event);
79 }

2020年1月2日

Caesar卢尚宇

原文地址:https://www.cnblogs.com/nxopen2018/p/12166058.html

时间: 2024-10-02 08:51:14

QT界面开发-(特效)无边框窗口+背景图片的相关文章

【Qt编程】无边框窗口的缩放与拖动

在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词本: 很明显,两者的主要区别就是周围的边框问题.你可以对比QQ以前的版本和这几年的版本,就会发现都倾向于下面这种窗口模式.下面我们就说说如何用Qt实现无边框窗口的缩放与拖动. 对于无边框窗口的拖动其实很简单,其基本思想是,在鼠标移动前后记录鼠标的坐标,然后将窗口移动这两个坐标之差的距离即可,具体实现

【Qt编程】无边框窗口的拖动

在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口的缩放相关的程序放在一起,下面专门单独分离出来. 窗口的拖放只涉及到鼠标事件:按下操作.释放操作和移动操作,因此只需要重写这三个函数.由于程序比较简单,并且注释也比较详细,就不作过多介绍.新建一个基类为QWidget的Qt Gui应用程序,只需修改widget.h和widget.cpp文件如下: 1

pyQt5设计无边框窗口

from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QVBoxLayoutfrom PyQt5.QtCore import Qt, QPointfrom PyQt5.QtGui import QFont, QCursor class QTitleLabel(QLabel): """ 新建标题栏标签类 """ def __init__(self, *args): super(QTitl

Qt添加窗口背景图片、Label图片显示、、Label文字显示

一.添加窗口背景图片 重写MainWindow绘制事件 void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawPixmap(0,0,width(),height(),QPixmap("background.png")); qDebug()<<event; }记得在头文件中声明函数. 二.图片显示 QPixmap car("Car.png"

141107●Winform拖动无边框窗口、播放音频、启动外部exe程序

鼠标拖动无边框窗口 1. //鼠标拖动 Point downpoint = new Point(); //事件,鼠标按下,获取当前坐标 private void panel1_MouseDown(object sender, MouseEventArgs e) { downpoint.X = -e.X; downpoint.Y = -e.Y; } //事件,鼠标移动,赋值新坐标 private void panel1_MouseMove(object sender, MouseEventArgs

winform无边框窗口拖动

无边框的窗口想拖动,只需要在置顶的容器上添加对应的mousedown 和 mousemove 事件就可以实现了.代码如下: 1 //拖动窗口 2 private Point mPoint = new Point(); 3 4 private void panel1_MouseDown(object sender, MouseEventArgs e) 5 { 6 mPoint.X = e.X; 7 mPoint.Y = e.Y; 8 } 9 10 private void panel1_Mouse

Winform 无边框窗口移动自定义边框粗细颜色

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace Wi

QT中给各控件增加背景图片(可缩放可旋转)的几种方法

http://blog.csdn.net/liukang325/article/details/44832397 1. 给QPushButton 增加背景图片:背景图片可根据Button大小自由缩放. [cpp] view plaincopy void setButtonBackImage(QPushButton *button,QString image,int sizeW, int sizeH) { //163,163为原始分辨率,这里稍做了调整. QPixmap pixmap(image)

QT中给各控件增加背景图片的几种方法

1. 给QPushButton 增加背景图片:背景图片可根据Button大小自由缩放. void setButtonBackImage(QPushButton *button,QString image,int sizeW, int sizeH) { //163,163为原始分辨率,这里稍做了调整. QPixmap pixmap(image); QPixmap fitpixmap=pixmap.scaled(163,163).scaled(sizeW, sizeH, Qt::IgnoreAspe