自定义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 ...
随机推荐
- 去除TFS版本控制信息
为了避免对版本库的影响,可以自己离线的修改代码,就要脱离TFS的管理,解决方案: 1.找到*.sln文件用文本打开,可以找到: Global GlobalSection(SolutionConfigu ...
- 解决Win8不能上网攻略第二版!三步秒杀原驱动
关于Win8消费者预览版的网卡驱动确实是令人头疼的事情,不少用户都抱怨无法联网而且驱动卸载十分麻烦.IT之家社区luoyousi 此前分享<图文教程:解决Win8消费者预览版不能上网问题> ...
- STL——increment/decrement/dereference操作符
increment/dereference操作符在迭代器的实现上占有非常重要的地位,因为任何一个迭代器都必须实现出前进(increment,operator++)和取值(dereference,ope ...
- c++回调编程本质
1. boost:bind获得一个函数对象,就像函数指针一样,这个行为可以作为回调 2. bosot:bind的函数对象可以保存别的对象的引用,回调对象的成员函数 3. boost:function是 ...
- Java笔试题二:读程序
public class SopResult { public static void main(String[] args) { int i = 4; System.out.println(&quo ...
- OD: Vulnerabilities Analyze Skills
第五篇了,漏洞分析案例 漏洞利用的灵活程度让这门技术变得似乎没有什么原则可言,只有实践后总结提高才能挥洒自如. 漏洞分析方法 目标:弄清攻击原理.评估潜在利用方式及风险等级.扎实的漏洞利用技术是进行漏 ...
- Sublime Text3使用详解
Sublime Text简介 Sublime Text - 性感的代码编辑器.程序员之必备神器 Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器.Sublime Text ...
- JAVA 读取pdf文件
第一个路口action /* * wuhan syspro author zhangrui 2010/08/23 */ package jp.co.syspro.poo.action; import ...
- php 简单连接数据库的操作
<?php /** * TestGuest Version1.0 * ================================================ * Copy 2010-2 ...
- My.Ioc 代码示例——使用观察者机制捕获注册项状态的变化
在 My.Ioc 中,要想在服务注销/注册时获得通知,可以通过订阅 ObjectBuilderRegistered 和 ObjectBuilderUnregistering 这两个事件来实现.但是,使 ...