Qt---自定义对话框形状、移动窗体
2016-08-22 22:55
447 查看
mainwindow.h
mainwindow.cpp
运行结果:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> #include <QMouseEvent> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); protected: //重载基类的鼠标按下事件处理函数 virtual void mousePressEvent(QMouseEvent *event); //重载基类的鼠标释放事件处理函数 virtual void mouseReleaseEvent(QMouseEvent *event); //重载基类的鼠标移动事件处理函数 virtual void mouseMoveEvent(QMouseEvent *event); private: Ui::MainWindow *ui; QLabel *m_pObjBg; //对话框背景图片 QPoint move_point; //鼠标按下位置 bool mouse_press; //鼠标是否按下的标识 }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { //ui->setupUi(this); //设置界面背景透明 QPalette palette = this->palette(); palette.setBrush(QPalette::Window, QBrush(Qt::NoButton)); //透明画刷 setPalette(palette); //设置当前对话框的调色板 setAutoFillBackground(true); //自动填充背景颜色 setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog | Qt::WindowStaysOnTopHint); //屏幕边框消失,窗体位于最前方 setAttribute(Qt::WA_TranslucentBackground); //窗体透明 //背景标签 m_pObjBg = new QLabel(this); QPixmap pmpBg(":/bg3.png"); m_pObjBg->setFixedSize(pmpBg.width(), pmpBg.height()); //设置背景标签的大小和背景图标大小一致 this->setFixedSize(pmpBg.width(), pmpBg.height()); //设置背景标签样式表 m_pObjBg->setStyleSheet("QLabel {background-image: url(:/bg3.png);}"); m_pObjBg->move(0, 0); m_pObjBg->setVisible(true); } MainWindow::~MainWindow() { delete ui; } //重载基类的鼠标按下事件处理函数 void MainWindow:: mousePressEvent(QMouseEvent *event) { //只能是鼠标左键移动 if(event->button() == Qt::LeftButton) { mouse_press = true; } /* * 窗口移动距离 * globalPose(), 以桌面左上角为原点,绝对坐标 * pos(), 窗体左上角(不含边框)的坐标,只要鼠标在窗体内,且窗体不动,坐标不变 */ move_point = event->globalPos() - pos(); } //重载基类的鼠标释放事件处理函数 void MainWindow:: mouseReleaseEvent(QMouseEvent *event) { mouse_press = false; } //重载基类的鼠标移动事件处理函数 void MainWindow:: mouseMoveEvent(QMouseEvent *event) { //移动窗口 if(mouse_press) { /* * event->globalPos() - move_point * =event->globalPos() - (event->globalPos0() - pos0()) * =pos() + (event->globalPos() - event->globalPos0()) */ move(event->globalPos() - move_point); } }
运行结果:
相关文章推荐
- Qt 在自定义标题栏长按鼠标左键来实现窗体移动
- Qt学习笔记:自定义窗体的移动+控件图标
- MFC对话框程序中当鼠标移动到控件上后改变形状
- 教你创建自定义形状的窗体
- Qt 无边框、透明、可移动、的个性窗体案例详解
- Qt实现当鼠标移动到窗体上,窗体由半透明变为不透明
- qt 移动无边框的窗体
- 自定义处理窗体的移动消息WM_MOVE
- Qt 无边框、透明、可移动、的个性窗体案例详解
- Qt 无边框、透明、可移动、的个性窗体案例详解(转载)
- Qt实现当鼠标移动到窗体上,窗体由半透明变为不透明
- Qt 第二章 创建对话框--纯代码实现改变形状的对话框(二)
- Qt 第二章 创建对话框--改变形状的对话框(一)
- MFC对话框禁止移动 使标题栏不响应鼠标消息 通过客户区移动窗体 OnNcHitTest()的实现
- Qt学习——不规则窗体形状
- Qt 无边框、透明、可移动、的个性窗体案例详解
- Qt 无边框、透明、可移动、的个性窗体案例详解
- Qt 第二章 创建对话框--纯代码实现改变形状的对话框(二)
- Qt学习——不规则窗体形状 .
- 自定义形状窗体