自定义Qt按钮
转自:http://blog.csdn.net/starcloud_zxt/article/details/5185556
Qt自带的PushButton样式比较单一,在开发的时候往往按钮的形状各异,所以需要自定义Qt的按钮。其方法是做一张图片来作为按钮,如果需要动态效果的话,可以做两张图片进行替换。按钮的载体可以是QLabel、QPushButton,可以通过QStyle类来设计样式,如果对QStyle不太了解的话,可以用下面的方法来实现。
1. 使用QPushButton
通过自定义一个按钮样式函数,在该函数中设置按钮的样式。(可以设计一个QPushButton的子类来完成设置)
实现代码:
- QPushButton *custButton(QString str,QString str1)
- {
- QPushButton *pushButton= new QPushButton;
- pushButton->setGeometry(10,10,200,200); //按钮的位置及大小
- pushButton->clearMask();
- pushButton->setBackgroundRole( QPalette::Base);
- QPixmap mypixmap; mypixmap.load(str);
- pushButton->setFixedSize( mypixmap.width(), mypixmap.height() );
- pushButton->setMask(mypixmap.createHeuristicMask());
- pushButton->setIcon(mypixmap);
- pushButton->setIconSize(QSize(mypixmap.width(),mypixmap.height()));
- pushButton->setToolTip(str1);
- return pushButton;
- }
调用代码:
- QPushButton *btn=custButton("../login.png", "LOGIN");
- connect(btn, SIGNAL(clicked()), this, SLOT(slotLogin()));
2. 通过QLabel
我们可以把一个图片放在QLabel里面作为按钮,因为我没有找到QLabel是否有当点击后发出的信号,所以自定义了一个鼠标事件用来检测是否在QLabel上点击了鼠标。在自定义的鼠标事件中检测QLabel所在的区域,当在该区域发生鼠标点击事件后,发送信号。
设计时通过Qt Creator在widget.ui中加入一个QLabel即可,不需要进行设置。
代码widget.h
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QWidget>
- namespace Ui {
- class Widget;
- }
- class Widget : public QWidget {
- Q_OBJECT
- public:
- Widget(QWidget *parent = 0);
- ~Widget();
- signals:
- void clicked();
- protected:
- void mousePressEvent(QMouseEvent *e);
- protected slots:
- void slotClicked();
- private:
- Ui::Widget *ui;
- };
- #endif // WIDGET_H
代码widget.cpp
- #include "widget.h"
- #include "ui_widget.h"
- #include <QMouseEvent>
- #include <QMessageBox>
- #include <QPixmap>
- #include <QLabel>
- Widget::Widget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Widget)
- {
- ui->setupUi(this);
- //使用label作为按钮,通过自定义鼠标事件,点击label所在区域实现鼠标单击
- QPixmap pm; pm.load("../logo.png");
- ui->label->setGeometry(0,0,pm.width(), pm.height());
- ui->label->setPixmap(pm);
- connect( this, SIGNAL(clicked()), this, SLOT(slotClicked())); //信号连接
- }
- Widget::~Widget()
- {
- delete ui;
- }
- void Widget::mousePressEvent(QMouseEvent *e)
- {
- int x = e->x();
- int y = e->y();
- //假如在QRect( 0, 0, 48, 48 )这个区域里(图片大小为48X48),就发出信号
- if (x>0 && x<48 && y>0 && y<48){
- emit clicked();
- }
- }
- void Widget::slotClicked()
- {
- QMessageBox::about( this, "Mouse Example", "You have pressed mouse, exit now!");
- close();
- }
自定义Qt按钮的更多相关文章
- 自定义QT窗口部件外观之QStyle
自定义QT窗口部件外观 重新定义Qt内置窗口部件的外观常用的方法有两种:一是通过子类化QStyle 类或者预定义的一个样式,例如QWindowStyle,来定制应用程序的观感:二是使用Qt样式表. Q ...
- Mono自定义图片按钮
首先,我们编写一个MyImageButton类,继承自LinearLayout public class MyPhoneImageButton:LinearLayout { private Image ...
- android自定义控件(3)-自定义当前按钮属性
那么还是针对我们之前写的自定义控件:开关按钮为例来说,在之前的基础上,我们来看看有哪些属性是可以自定义的:按钮的背景图片,按钮的滑块图片,和按钮的状态(是开还是关),实际上都应该是可以在xml文件中直 ...
- iOS 自定义返回按钮,保留系统滑动返回
原文链接 自定义返回按钮保留系统滑动返回手势.gif 1.简介 使用苹果手机,最喜欢的就是用它的滑动返回.作为一个开发者,我们在编写很多页面的时候,总是会因为这样那样的原因使得系统的滑动返回不可用.使 ...
- easyUI——datebox验证和自定义取消按钮
来源:http://blog.csdn.net/liusong0605/article/details/42270463 1. datebox验证 验证结束时间<起始时间: 起始时 ...
- iOS 7 自定义Back按钮 与 Pop interactive gesture 问题
1.自定义Back按钮 iOS中很多时候我们都会自定义返回按钮,也是一件easy的事,类似如下: // 返回按钮 1 - (void)showNavBackButton { UIButton *bac ...
- Android 自定义Button按钮显示样式(正常、按下、获取焦点)
现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天学习自定义Button按钮样式.Button样式修改的是Button的背景 ...
- GridView控件中插入自定义删除按钮并弹出确认框
GridView控件中插入自定义删除按钮,要实现这个功能其实有多种方法,这里先记下我使用的方法,以后再添加其他方法. 一.实现步骤 1.在GridView中添加模板列(TemplateField). ...
- ArcGIS API for JavaScript 4.2学习笔记[16] 弹窗自定义功能按钮及为要素自定义按钮(第五章完结)
这节对Popups这一章的最后两个例子进行介绍和解析. 第一个[Popup Actions]介绍了弹窗中如何自定义工具按钮(名为actions),以PopupTemplate+FeatureLayer ...
随机推荐
- android图片缓存框架Android-Universal-Image-Loader(二)
http://blog.csdn.net/king_is_everyone/article/details/35595515 这篇打算直接告诉大家怎么用吧,其实这个也不是很难的框架,大致使用过程如下: ...
- 查看linux系统状态
就类似你装完xp后,或者你拿到一台新的机器的时候,你通常都是进入系统,看看他的cpu,内存,硬盘使用情况.我也按照这个来看看linux的系统状态.1:top 退出按q,这个就类似windows的任务管 ...
- 使用 Java 配置进行 Spring bean 管理--转
概述 众所周知,Spring 框架是控制反转 (IOC) 或依赖性注入 (DI) 模式的推动因素,而这种推动是通过基于容器的配置实现的.过去,Spring 允许开发人员使用基于 XML 的配置,通过利 ...
- Linux Terminal 控制终端的使用
1. Open new Terminal:Ctrl + Alt + T 或者 Ctrl + Shift + N 2. Open Tab:Ctrl + Shift + T 3. Close Tab:Ct ...
- Android(java)学习笔记247:ContentProvider使用之利用ContentProvider备份和还原手机短信(掌握)
1.通过阅读系统源码我们知道: 短信的内容提供者: content://sms/ 系统短信的内容提供者的路径 2. 利用ContentProvider备份和还原手机短信: (1) ...
- EventBus分析
1. 功能介绍 1.1 EventBus EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,这里的事件可以理解为消息,本文中统一称为事 ...
- 9.2noip模拟试题
题目名称 改造二叉树 数字对 交换 英文名称 binary pair swap 输入文件名 binary.in pair.in swap.in 输出文件名 binary.out pair.out ...
- codevs 1213 解的个数(我去年打了个表 - -)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int T,x ...
- 开始学习编程了…… 2015年九月七日 …… 31岁的Me.
给自己下的命令:做今天开始认认真真地开始学习编程,一年后的今天一定要找到一份编程的工作. 为什么要学编程?:因为不想回以前的圈子,“创业”快三年什么都给“创”没了,咳……,不过呢,倒是领略到编程能带来 ...
- 高健壮性css---Float详细
(一)关于float 首先我们了解到,CSS网页布局的原理,就是按照HTML代码中对象声明的顺序,以流布局的方式来显示它,而流布局就不得不说到float浮动技术..在HTML中的所有对象,默认分为两种 ...