QT 绘制按钮 paintEvent enterEvent leaseEvent mouseEvent
案例2:绘制按钮
main.cpp
#include<QApplication>
#include “demoWidget.h”
int main(int args , int argv)
{
QApplication app(args , argv);
DemoWidget w;
w.resize(400,400);
w.setVisible(true);
return app.exec();
}
main.pro
TEMPLATE=app
SOURCES=main.cpp demoWidget.cppdemoPushButton.cpp
HEADERS=demoWidget.h demoPushButton.h
CONFIG=release qt
QT=core gui
TARGET=main
demoWidget.h
#ifndef DEMO2_WIDGET_H
#define DEMO2_WIDGET_H
#include<QWidget>
#include “demoPushButton.h”
class DemoWidget: public QWidget
{
public:
DemoWidget(QWidget * parent=NULL);
public:
DemoPushButton * btn;
};
#endif
demoWidget.cpp
#include “demoWidget.h”
#include “demoPushButton.h”
DemoWidget::DemoWidget(QWidget *parent):QWidget(parent)
{
btn = new DemoPushButton(this);
btn->resize(100,30);
btn->move(100,100);
}
绘制按钮:
demoPushButton.h
#include<QPushButton>
#include<QPaintEvent>
#include<QMouseEvent>
#ifndef DEMO2_PUSHBUTTON_H
#define DEMO2_PUSHBUTTON_H
class DemoPushButton : public QPushButton
{
public:
DemoPushButton(QWidget * parent=NULL);
protected:
virtual void paintEvent(QPaintEvent * e);
virtual void enterEvent(QEvent * e);
virtual void leaveEvent(QEvent * e);
virtual void mouseEvent(QMouseEvent*e);
private:
bool israised;
};
#endif
demoPushButton.cpp
#include “demoPushButton”
#include<QColor>
#include<QBrush>
#include<QPen>
#include<QPoint>
#include<QPainter>
DemoPushButton::DemoPushButton(QWidget*parent)
:QPushButton(parent),israised(true)
{
setMouseTracking(true); //跟踪鼠标移动事件
}
void DemoPushButton::paintEvent(QPaintEvent* e)
{
//绘制按钮的边界
int w=width(); //按钮宽度
int h=height(); //按钮高度
QColor clrw(255,255,255);
QColor clrb(0,0,0);
QBrush brw(clrw);
QBrush brb(clrb);
QPen penw(brw,2);
QPen penb(brb,2);
QPoint pttop(w/2,0);
QPoint ptbottom(w/2,h);
QPoint ptleft(0,h/2);
QPoint ptright(w,h/2);
QPainter g(this);
if(israised)
{
g.setPen(penw);
}
else
{
g.setPen(penb);
}
g.drawLine(pttop,ptleft);
g.drawLine(pttop,ptright);
if(israised)
{
g.setPen(penb);
}
else
{
g.setPen(penw);
}
g.drawLine(ptbottom,ptleft);
g.drawLine(ptbotton,ptrright);
}
void DemoPushButton::enterEvent(QEvent * e)
{
israised=false;
repaint(); //重新绘制按钮
}
void DemoPushButton::leaveEvent(QEvent * e)
{
israised=true;
repaint();
}
void DemoPushButton::mouseEvent(QMouseEvent * e)
{
float w=this->width();
float h=this->height()
int x=e->x();
int y=e->y();
float k=h/w; //斜率
if( y>-k*x+h/2 &&
y>=k*x-h/2 &&
y<=k*x+h/2 &&
y<=-k*x+3*h/2)
{
israise=false;
}
else
{
israise=true;
}
repaint();
}
QT 绘制按钮 paintEvent enterEvent leaseEvent mouseEvent的更多相关文章
- Qt 圆角按钮,面版自动布局
一.前言 在部分界面开发中,有时需要动态添加控件或按钮到面板中,在不需要时又需要删除该控件,故模仿视频开发中的设置屏蔽词,通过自己绘制的按钮与排布面板控件实现. 实现效果如下: 说明: 1.输入框可设 ...
- QT绘制饼图
QT版本:QT5.6.1 QT绘制饼图,出问题的代码如下 void DrawPieDialog::paintEvent(QPaintEvent *event) { float startAngle=0 ...
- Qt绘制文本一
QPainterPath,使用 drawText且设置字体,再使用painter.drawText方式 效果图: void WgtText::paintEvent(QPaintEvent *event ...
- Qt 学习之路 2(24):Qt 绘制系统简介
Qt 学习之路 2(24):Qt 绘制系统简介 豆子 2012年10月30日 Qt 学习之路 2 77条评论 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于Q ...
- Qt浮动按钮的实现(使用窗口背景透明、实现只显示浮动按钮的目的)
Qt浮动按钮的实现 效果如下: 图3 估计很多做Qt有一定经验的朋友会觉得这个效果不难,但是这是一个需求奇葩的实际业务中做出的效果.笔者会想讲下客户的需求和整体框架的矛盾. 整个项目主要是由Qt搭建的 ...
- 自绘实现半透明水晶按钮(继承CButton,设置BS_OWNERDRAW风格,覆盖DrawItem函数绘制按钮,把父窗口的背景复制到按钮上,实现视觉上的透明,最后通过AlphaBlend实现半透明)
运行效果 实现方法 1.给按钮加上BS_OWNERDRAW样式2.重载DrawItem函数,在这里绘制按钮3.关键之处就是把父窗口的背景复制到按钮上,实现视觉上的透明4.最后通过AlphaBlend实 ...
- QT绘制半透明窗体(改写paintEvent,超级简单)
在派生类中重载QDialog的void paintEvent(QPaintEvent *)事件,在这个函数中加入以下代码 QPainter painter(this); QLinearGradi ...
- Qt绘制异形窗体
异形窗体即不规则窗体,一般采用png图片,一般绘制异形窗体分两步: 1.设置遮罩区 2.绘制图片 使用png图片的透明部分作为遮罩区,然后绘制图片,这样我们就看到一个只绘制了非透明部分的图形,废话 ...
- Qt 学习之路 :Qt 绘制系统简介
Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类. QPainter用来执行绘制的 ...
随机推荐
- C语言的本质(32)——C语言与汇编之C语言内联汇编
用C写程序比直接用汇编写程序更简洁,可读性更好,但效率可能不如汇编程序,因为C程序毕竟要经由编译器生成汇编代码,尽管现代编译器的优化已经做得很好了,但还是不如手写的汇编代码.另外,有些平台相关的指令必 ...
- 大数据时代的数据存储,非关系型数据库MongoDB(一)
原文地址:http://www.cnblogs.com/mokafamily/p/4076954.html 爆炸式发展的NoSQL技术 在过去的很长一段时间中,关系型数据库(Relational Da ...
- B-JUI(Best jQuery UI) 前端框架
From :http://b-jui.com/大略看了下还不错,收藏之.
- tangible T4 Editor 2.2.3 plus modeling tools for VS 2012 扩展名
tangible T4 Editor 2.2.3 plus modeling tools for VS 2012 扩展名 tangible T4 Editor 2.2.3 plus modeling ...
- AFNetWorking网络请求
NetWorkAPIClient.h #import <Foundation/Foundation.h> #import "AFHTTPRequestOperationManag ...
- struts2 action重定向
struts2的结果类型: <action name="loginAction" class="com.itheima.action.LoginAction&quo ...
- git使用经验
一直想写一点关于git的文章,但是平时太懒了,没有写,现在写些经验这里,方便以后自己忘记了.
- HTML 5 全局属性和事件属性
1.HTML 5 全局属性 HTML 属性能够赋予元素含义和语境. 下面的全局属性可用于任何 HTML5 元素. NEW:HTML 5 中新的全局属性. 属性 描述 accesskey 规定访问元素的 ...
- Mongoose的使用
最近想做一个练手的App小项目.考虑到数据接口的问题,因为关系型数据库用的比较多,也有一定经验了,所以打算使用比较火的MongoDB作为数据库,下面就介绍一下Mongoose的使用方法吧. 概念:Mo ...
- 垃圾回收器 Dispose 和 Finalize 的互补作用
假如我们程序有两个窗口 Form1.Form2; 当我们关闭一个窗口的时候,会发出一个 终止响应,并将该窗口对象送入终止队列,公共语言运行库的垃圾回收器跟踪着这个对象的生存期,此时就会调用此对象的基类 ...