注:本文本来应该是以一个不规则的图片作为历程的,,忘记了!!!!

一.第一阶段:隐藏窗体框架

运行结果(GIF动图):

widget.cpp

二.第二阶段:将窗口设置为透明

运行结果(GIF动图):

widget.cpp

三.第三阶段:结合鼠标坐标

在隐藏窗体框架、将窗口设置为透明的基础之上,获取鼠标坐标向量。

step1:运行结果(GIF动图):


widget.cpp增添内容:

step2:添加鼠标右键QMenu,运行结果(GIF动图):


widget.h

widget.cpp

step3:step2的另一种更好的实现:

四:附代码

xiaowen_QT_day27.pro

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.h# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QMenu>
class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);
private:QPoint _presspos;bool _leftButtonPressed;QMenu* _menu;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include<QPainter>
#include<QMouseEvent>
#include<QDebug>
#include<QMenu>
Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowFlag(Qt::FramelessWindowHint);//隐藏窗体框架this->setAttribute(Qt::WA_TranslucentBackground);//将窗口设置为透明_menu=new QMenu("Menu",this);_menu->addAction("关闭",this,SLOT(close()));_menu->show();
}
void Widget::paintEvent(QPaintEvent *event)
{QPainter painter;painter.begin(this);painter.drawPixmap(0,0,QPixmap("C:/Users/xiaowen/Desktop/千反田.jpg"));painter.end();
}void Widget::mousePressEvent(QMouseEvent *event)
{qDebug()<<event->pos()<<endl;if(event->button()==Qt::LeftButton){_presspos=event->pos();_leftButtonPressed=true;}else if(event->button()==Qt::RightButton){_leftButtonPressed=false;//_menu->move(this->cursor().pos());//获取光标的位置//_menu->show();_menu->exec(QCursor::pos());//cursor是光标的意思}else{}
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{qDebug()<<event->pos()<<endl;if(event->button()==Qt::LeftButton){this->move(pos()+(event->pos()-_presspos));}
}Widget::~Widget()
{}

main.cpp

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

注:new过的忘记delete了。。

QT每日一练day27:绘制不规则窗体相关推荐

  1. QT每日一练day4:ubuntu中使用QT

    (本文主要是为了说明QT的跨平台特性)   一.安装QT sudo apt-get install qt5-default qtcreator cmake 二.打开QT 可以点击图标或命令行方式: 三 ...

  2. QT每日一练day1:第一个程序

    参考博文:Qt常见类.窗口类继承关系树图 QT每日一练(1):第一个程序 最终效果(GIF动图): step1: step2: step3: step4: step5: step6: step7: s ...

  3. QT每日一练day26:绘制图片

    一.第一阶段 发现上述图片没有显示全!!!!! 二.第二阶段 设置宽高比,平滑转换 运行结果(GIF动图): 发现上述图片在数次缩放后会产生失真!!!!! 三.第三阶段 为了避免图像缩放过程中产生失真 ...

  4. QT每日一练day24:绘画事件

    一.第一阶段 设置线条粗细 二.第二阶段:设置笔的样式 如:虚线 三.第三阶段:绘制矩形 四.第四阶段:设置颜色 轮廓颜色 笔刷颜色 笔刷样式 五.第五阶段:绘制其他形状图像和文字 六.第六阶段:图像 ...

  5. QT每日一练day29:QT中的多线程探究

    一.未使用多线程,则w0先运行完后,w1才开始运行 运行结果(GIF动图): main.cpp xiaowen_QT_day29.pro QT+=widgets SOURCES += \main.cp ...

  6. QT每日一练day25:触发绘画事件

    运行结果(GIF动图): widget.cpp 附代码: xiaowen_QT_day25.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT ...

  7. QT每日一练day23:鼠标进入与离开事件

    运行结果(GIF动图): xiaowen_QT_day23.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFI ...

  8. QT每日一练day22:键盘事件

    一.第一阶段--键盘按键按下事件 运行结果(GIF动图): xiaowen_QT_day22.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): Q ...

  9. QT每日一练day21:鼠标事件

    一.第一阶段--鼠标点击和释放事件 运行结果(GIF动图): MouseEvent.pro #------------------------------------------------- # # ...

最新文章

  1. 通用数组(练习,可能有错)
  2. C#中数据类型的安全转换(is,as)
  3. 茄子快传 java,GitHub - wuyxhero/KuaiChuan: 仿茄子快传的一款文件传输应用
  4. 【javascript】js处理字符串
  5. android 枚举类型比较大小写,Spring 3.0 MVC绑定枚举区分大小写
  6. javaScript学习笔记之运算符
  7. 【JavaScript吉光片羽】--- 滑动条
  8. 淘宝客程序 —— 突破了传统淘宝客程序对自动采集商品收费的模式
  9. MacOS系统自带截图快捷键
  10. 【转】简析 .NET Core 构成体系
  11. 震惊:selenium竟然不是自动化测试工具
  12. 常见Linux命令(非文件操作)
  13. 如何在映像更改后升级docker容器
  14. web前端网页设计作业_如何学习网页前端设计培训?
  15. mysql 数据导入导出说明
  16. 9张图带你了解全宇宙最神秘的团体——程序员
  17. iOS自动布局高级用法 纯代码约束写法
  18. 常用的开源3D游戏引擎(转)
  19. 【邮箱】Foxmail中如何登陆网易邮箱?
  20. 【编程语言】品诺试题

热门文章

  1. Hello Quartz (第三部分)
  2. 章节三、2-方法_演示实例
  3. 【GISER Painter】矢量切片(Vector tile)番外一:Proj4js
  4. this 的4种绑定机制
  5. SWIFT学习笔记01
  6. 条款5:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)...
  7. 菜鸟学习Spring——60s配置XML方法实现简单AOP
  8. Oracle数据库时间修改
  9. 离线缓存之RNCachingURLProtocol解析
  10. cad布局打印出图-01-模型空间打印