贵州省住房和城乡建设局网站,长春网页设计培训,营销咨询公司收费标准,长春网站建设公司排名文章目录前言一、资源文件的添加二、初始化窗口三、重写paintEvent函数实现窗口重绘四、重写QMouseEvent相关函数实现不规则窗口的移动及关闭五、demo完整代码六、下载链接总结前言
本文实现了Qt下显示两个不规则形状的窗口demo#xff0c;其中有Qt的窗口对话框和QPaintEvent…
文章目录前言一、资源文件的添加二、初始化窗口三、重写paintEvent函数实现窗口重绘四、重写QMouseEvent相关函数实现不规则窗口的移动及关闭五、demo完整代码六、下载链接总结前言
本文实现了Qt下显示两个不规则形状的窗口demo其中有Qt的窗口对话框和QPaintEvent及QMouseEvent的简单使用这里将相关内容展示出来以便大家学习如有错误之处欢迎大家批评指正。
项目效果 提示以下是本篇文章正文内容下面案例可供参考
一、资源文件的添加
首先要准备好透明背景的图片之后行成的窗口就是你的图片的形状在本文的demo中有将图片添加为资源文件添加资源文件的步骤在我以前写的文章有详细描述读者可自行查看一Qt实现自定义控件的两种方式—提升法不添加资源文件的话注意图片的输入路径就行
二、初始化窗口
这里进行窗口的初始化其中主要的函数是setMask()可以通过F1来查看该函数详细信息
void Dialog::initWidget()
{//保持顶部窗口this-setWindowFlags(this-windowFlags() | Qt::WindowStaysOnTopHint);QPixmap pix;pix.load(:/photo/flower.png,0,Qt::AvoidDither); //如果没有将图片添加为资源文件此处路径更改为完整路径resize(pix.size());setMask(QBitmap(pix.mask())); //设置透明setAttribute(Qt::WA_TranslucentBackground); //去除毛边//实例化对象myLL new MyLL();
}三、重写paintEvent函数实现窗口重绘
void Dialog::paintEvent(QPaintEvent *event)
{//qDebug()event:event;QPainter painter(this);painter.drawPixmap(rect(),QPixmap(:/photo/flower.png),QRect());
}四、重写QMouseEvent相关函数实现不规则窗口的移动及关闭
void Dialog::mousePressEvent(QMouseEvent *event)
{if(event-button() Qt::LeftButton){startPoint event-globalPos() - frameGeometry().topLeft();event-accept();}if(event-button() Qt::RightButton){myLL-show();}if(event-button() Qt::MidButton){//关闭全部窗口myLL-close();this-close();}
}void Dialog::mouseMoveEvent(QMouseEvent *event)
{if(event-buttons() Qt::LeftButton){move(event-globalPos() - startPoint);event-accept();}
}五、demo完整代码
1.MyPhoto.pro
QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11DEFINES QT_DEPRECATED_WARNINGS#设置生成名称及图标
RC_ICONS ll.ico
TARGET lingSOURCES \main.cpp \dialog.cpp \myll.cppHEADERS \dialog.h \myll.hFORMS \dialog.ui \myll.ui# Default rules for deployment.
qnx: target.path /tmp/$${TARGET}/bin
else: unix:!android: target.path /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS targetRESOURCES \photo.qrc#全局忽略编译警告QMAKE_CXXFLAGS
QMAKE_CXXFLAGS -Wno-unused-function #未使用的函数
QMAKE_CXXFLAGS -Wno-unused-parameter #设置了但未使用的参数
QMAKE_CXXFLAGS -Wno-comment #注释使用不规范
QMAKE_CXXFLAGS -Wno-sequence-point #如出现ii这类代码则报警告
2.main.cpp
#include dialog.h
#include QApplicationint main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;if(w.keepHappy()){w.show();}return a.exec();
}3.dialog.h
#ifndef DIALOG_H
#define DIALOG_H#include QDialog
#include QMessageBox
#include myll.hQT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent nullptr);~Dialog();void initWidget();bool keepHappy();protected:void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);private:Ui::Dialog *ui;QPoint startPoint;MyLL *myLL;
};
#endif // DIALOG_H4.dialog.cpp
#include dialog.h
#include ui_dialog.hDialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui-setupUi(this);this-initWidget();
}Dialog::~Dialog()
{delete myLL;delete ui;
}void Dialog::initWidget()
{//保持顶部窗口this-setWindowFlags(this-windowFlags() | Qt::WindowStaysOnTopHint);QPixmap pix;pix.load(:/photo/flower.png,0,Qt::AvoidDither); //如果没有将图片添加为资源文件此处路径更改为完整路径resize(pix.size());setMask(QBitmap(pix.mask())); //设置透明setAttribute(Qt::WA_TranslucentBackground); //去除毛边//实例化对象myLL new MyLL();
}//main函数调用
bool Dialog::keepHappy()
{const QMessageBox::StandardButton ret QMessageBox::information(this,Nice to meet you!!!Love Lingling,Be confident and happy every day! Send you a flower flower ~~~\n每天都要自信且开心喔送你一朵小花花~,QMessageBox::Yes | QMessageBox::No);if(ret QMessageBox::Yes){return true;}else{keepHappy();}return true;
}void Dialog::paintEvent(QPaintEvent *event)
{//qDebug()event:event;QPainter painter(this);painter.drawPixmap(rect(),QPixmap(:/photo/flower.png),QRect());
}void Dialog::mousePressEvent(QMouseEvent *event)
{if(event-button() Qt::LeftButton){startPoint event-globalPos() - frameGeometry().topLeft();event-accept();}if(event-button() Qt::RightButton){myLL-show();}if(event-button() Qt::MidButton){//关闭全部窗口myLL-close();this-close();}
}void Dialog::mouseMoveEvent(QMouseEvent *event)
{if(event-buttons() Qt::LeftButton){move(event-globalPos() - startPoint);event-accept();}
}5.myll.h
#ifndef MYLL_H
#define MYLL_H#include QWidget
#include QMouseEvent
#include QPainter
#include QPixmap
#include QBitmap
#include QDebugnamespace Ui {
class MyLL;
}class MyLL : public QWidget
{Q_OBJECTpublic:explicit MyLL(QWidget *parent nullptr);~MyLL();void initWidget();protected:void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);private:Ui::MyLL *ui;QPoint startPoint;
};
#endif // MYLL_H6.myll.cpp
#include myll.h
#include ui_myll.hMyLL::MyLL(QWidget *parent) :QWidget(parent),ui(new Ui::MyLL)
{ui-setupUi(this);this-initWidget();
}MyLL::~MyLL()
{delete ui;
}void MyLL::initWidget()
{this-setWindowFlags(this-windowFlags() | Qt::WindowStaysOnTopHint);QPixmap pix;pix.load(:/photo/ll.png,0,Qt::AvoidDither);resize(pix.size());setMask(QBitmap(pix.mask())); //设置透明//setAttribute(Qt::WA_TranslucentBackground); //去除毛边
}void MyLL::paintEvent(QPaintEvent *event)
{//qDebug()event:event;QPainter painter(this);painter.drawPixmap(rect(),QPixmap(:/photo/ll.png),QRect());
}void MyLL::mousePressEvent(QMouseEvent *event)
{if(event-button() Qt::LeftButton){startPoint event-globalPos() - frameGeometry().topLeft();event-accept();}if(event-button() Qt::RightButton){this-close();}
}void MyLL::mouseMoveEvent(QMouseEvent *event)
{if(event-buttons() Qt::LeftButton){move(event-globalPos() - startPoint);event-accept();}
}7.dialog.ui新建项目时选择了QDialog作为Base class
8.myll.ui新建Qt设计师界面类时选择了Widget作为界面模板
六、下载链接
demo百度网盘链接https://pan.baidu.com/s/1_v1lC1unytYTEituAJJ8iA 提取码xxcj
–
总结
这里是一个简单的Qt开发demo所用到的一些知识点都在文章中添加了注释另外所用的图片需要透明的这样才能实现不规则窗口显示界面显示的文字读者可自定义不要在意我写的那些哈~PS:本demo是我用来哄对象开心的送了一朵花和她喜欢的皮卡丘嘿嘿嘿 hello 共同学习共同进步如果还有相关问题可在评论区留言进行讨论。
参考博客Qt学习笔记——不规则窗口自定义形状窗口 文章转载自: http://www.morning.ptxwg.cn.gov.cn.ptxwg.cn http://www.morning.zlxkp.cn.gov.cn.zlxkp.cn http://www.morning.fhqdb.cn.gov.cn.fhqdb.cn http://www.morning.rwcw.cn.gov.cn.rwcw.cn http://www.morning.fdlyh.cn.gov.cn.fdlyh.cn http://www.morning.khdw.cn.gov.cn.khdw.cn http://www.morning.rhmk.cn.gov.cn.rhmk.cn http://www.morning.bcdqf.cn.gov.cn.bcdqf.cn http://www.morning.qnjcx.cn.gov.cn.qnjcx.cn http://www.morning.ndpwg.cn.gov.cn.ndpwg.cn http://www.morning.jxltk.cn.gov.cn.jxltk.cn http://www.morning.fwzjs.cn.gov.cn.fwzjs.cn http://www.morning.jbshh.cn.gov.cn.jbshh.cn http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn http://www.morning.tkjh.cn.gov.cn.tkjh.cn http://www.morning.bsqbg.cn.gov.cn.bsqbg.cn http://www.morning.qpnmd.cn.gov.cn.qpnmd.cn http://www.morning.nggbf.cn.gov.cn.nggbf.cn http://www.morning.sltfk.cn.gov.cn.sltfk.cn http://www.morning.dwkfx.cn.gov.cn.dwkfx.cn http://www.morning.fqqcd.cn.gov.cn.fqqcd.cn http://www.morning.clbgy.cn.gov.cn.clbgy.cn http://www.morning.gwxwl.cn.gov.cn.gwxwl.cn http://www.morning.sjwzz.cn.gov.cn.sjwzz.cn http://www.morning.hqllj.cn.gov.cn.hqllj.cn http://www.morning.gqddl.cn.gov.cn.gqddl.cn http://www.morning.jykzy.cn.gov.cn.jykzy.cn http://www.morning.grpbt.cn.gov.cn.grpbt.cn http://www.morning.lhxdq.cn.gov.cn.lhxdq.cn http://www.morning.bxnrx.cn.gov.cn.bxnrx.cn http://www.morning.fslrx.cn.gov.cn.fslrx.cn http://www.morning.cpgdy.cn.gov.cn.cpgdy.cn http://www.morning.wcrcy.cn.gov.cn.wcrcy.cn http://www.morning.ygqhd.cn.gov.cn.ygqhd.cn http://www.morning.tdnbw.cn.gov.cn.tdnbw.cn http://www.morning.jyfrz.cn.gov.cn.jyfrz.cn http://www.morning.qpnmd.cn.gov.cn.qpnmd.cn http://www.morning.ffcsr.cn.gov.cn.ffcsr.cn http://www.morning.ljyqn.cn.gov.cn.ljyqn.cn http://www.morning.bnpn.cn.gov.cn.bnpn.cn http://www.morning.kljhr.cn.gov.cn.kljhr.cn http://www.morning.qcrhb.cn.gov.cn.qcrhb.cn http://www.morning.jgykx.cn.gov.cn.jgykx.cn http://www.morning.thjqk.cn.gov.cn.thjqk.cn http://www.morning.zczkm.cn.gov.cn.zczkm.cn http://www.morning.xltwg.cn.gov.cn.xltwg.cn http://www.morning.pzqnj.cn.gov.cn.pzqnj.cn http://www.morning.oumong.com.gov.cn.oumong.com http://www.morning.pfnrj.cn.gov.cn.pfnrj.cn http://www.morning.wxccm.cn.gov.cn.wxccm.cn http://www.morning.xfcjs.cn.gov.cn.xfcjs.cn http://www.morning.rpjr.cn.gov.cn.rpjr.cn http://www.morning.kzcfr.cn.gov.cn.kzcfr.cn http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn http://www.morning.c7627.cn.gov.cn.c7627.cn http://www.morning.xpmhs.cn.gov.cn.xpmhs.cn http://www.morning.njddz.cn.gov.cn.njddz.cn http://www.morning.fpqsd.cn.gov.cn.fpqsd.cn http://www.morning.jmbgl.cn.gov.cn.jmbgl.cn http://www.morning.ykmg.cn.gov.cn.ykmg.cn http://www.morning.bmsqq.cn.gov.cn.bmsqq.cn http://www.morning.lqytk.cn.gov.cn.lqytk.cn http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn http://www.morning.bcjbm.cn.gov.cn.bcjbm.cn http://www.morning.bntgy.cn.gov.cn.bntgy.cn http://www.morning.hjjhjhj.com.gov.cn.hjjhjhj.com http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn http://www.morning.nflpk.cn.gov.cn.nflpk.cn http://www.morning.wqhlj.cn.gov.cn.wqhlj.cn http://www.morning.kpcjl.cn.gov.cn.kpcjl.cn http://www.morning.kdjtt.cn.gov.cn.kdjtt.cn http://www.morning.ypxyl.cn.gov.cn.ypxyl.cn http://www.morning.ylljn.cn.gov.cn.ylljn.cn http://www.morning.brhxd.cn.gov.cn.brhxd.cn http://www.morning.mgbcf.cn.gov.cn.mgbcf.cn http://www.morning.sgmis.com.gov.cn.sgmis.com http://www.morning.4q9h.cn.gov.cn.4q9h.cn http://www.morning.khcpx.cn.gov.cn.khcpx.cn http://www.morning.dkqyg.cn.gov.cn.dkqyg.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn