Qt自定义图片按钮并设置方向
来源:互联网 发布:java访问次数 编辑:程序博客网 时间:2024/05/22 08:15
Qt自定义图片按钮,设置方向
虽然Qt定义了很多很多控件,但是还是不能满足用户的需要,比如如果想使用ToolButton,需要带文字,又需要文字可以设定位置,显然就不行了。下面的代码就是一个简单的实现ToolButton功能,并且能够设置图片的位置。
运行截图如下:
下面是代码部分:
基本定义
// BaseDefine.henum class WIDGET_DIRECTION{ WD_EAST, WD_SOUTH, WD_WEST, WD_NORTH};
头文件
// ImageButton.h#ifndef IMAGEBUTTON_H#define IMAGEBUTTON_H#include <QLabel>#include <QWidget>#include <QHBoxLayout>#include <QVBoxLayout>#include "BaseDefine.h"// 图片按钮类class ImageButton : public QWidget{ Q_OBJECTpublic: // 设置按钮的图片大小,如果不设置默认大小是50*50 static void SetImageSize(int w, int h) { mnWidth = w, mnHeight = h; } // 构造函数 ImageButton(QString text, const char* imagePath, WIDGET_DIRECTION imageDirection = WIDGET_DIRECTION::WD_NORTH, QWidget *parent = NULL);private: // 设置图片文本内容 void SetText(QString text); // 设置按钮图片 void SetImage(const char *imagePath);protected: // 重定义鼠标点击事件,只接受当前按钮内的点击和释放 void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event);signals: // 点击信号 void Clicked();private: // 设定的图片宽度和高度 static int mnWidth; static int mnHeight; // 承载图片和文字 QLabel* mLblImage; QLabel* mLblText; // 用于Label的布局,使呈现各种方位 QVBoxLayout* mLytBtnV; QHBoxLayout* mLytBtnH;};#endif // IMAGEBUTTON_H
源文件实现
#include "ImageButton.h"#include <QPixmap>#include <QMouseEvent>// 初始化默认值int ImageButton::mnWidth = 50;int ImageButton::mnHeight = 50;// 构造ImageButton::ImageButton(QString text, const char *imagePath, WIDGET_DIRECTION imageDirection, QWidget *parent) :QWidget(parent){ // 构造并设置 mLytBtnH = NULL; mLytBtnV = NULL; mLblImage = new QLabel(this); SetImage(imagePath); mLblText = new QLabel(this); SetText(text); mLblText->setScaledContents(true); // 判断图片位置,并设定 switch (imageDirection) { case WIDGET_DIRECTION::WD_EAST: mLytBtnH = new QHBoxLayout(this); mLytBtnH->addWidget(mLblText); mLblText->setAlignment(Qt::AlignRight | Qt::AlignVCenter); mLblText->setMinimumHeight(mLblImage->height()); mLytBtnH->addWidget(mLblImage); break; case WIDGET_DIRECTION::WD_SOUTH: mLytBtnV = new QVBoxLayout(this); mLytBtnV->addWidget(mLblText); mLytBtnV->addWidget(mLblImage); break; case WIDGET_DIRECTION::WD_WEST: mLytBtnH = new QHBoxLayout(this); mLytBtnH->addWidget(mLblImage); mLytBtnH->addWidget(mLblText); mLblText->setAlignment(Qt::AlignVCenter); mLblText->setMinimumHeight(mLblImage->height()); break; case WIDGET_DIRECTION::WD_NORTH: mLytBtnV = new QVBoxLayout(this); mLytBtnV->addWidget(mLblImage); mLytBtnV->addWidget(mLblText); break; default: break; } // 设置本控件内部的间隔为0 if (mLytBtnV != NULL) { mLytBtnV->setContentsMargins(0,0,0,0); mLytBtnV->setSpacing(0); } else { mLytBtnH->setContentsMargins(0,0,0,0); mLytBtnH->setSpacing(0); }}// 设置图片,并缩放void ImageButton::SetImage(const char *imagePath){ QPixmap pix(imagePath); QPixmap newPix = pix.scaled(mnWidth,mnHeight,Qt::KeepAspectRatio); mLblImage->setMaximumSize(mnWidth,mnHeight); mLblImage->setPixmap(newPix);}// 设置按钮文本void ImageButton::SetText(QString text){ mLblText->setText(text);}// 鼠标左键按下事件void ImageButton::mousePressEvent(QMouseEvent *event){ if (event->button() == Qt::LeftButton) { // 可以添加你自己定义的其他事件,比如被选中,或者恢复颜色 }}// 鼠标左键弹起事件void ImageButton::mouseReleaseEvent(QMouseEvent *event){ if (event->button() == Qt::LeftButton) { // 可以添加你自己定义的其他事件,比如被选中,或者恢复颜色 emit Clicked(); }}
这样就可以直接使用该控件了,在使用时可以根据需要灵活变换位置;本文没有列出其他的功能,如按钮样式的设置及其他的复杂功能,你可以自行设计。
原文出处:http://blog.csdn.net/motou263514/article/details/78075974
阅读全文
0 0
- Qt自定义图片按钮并设置方向
- QT 按钮图片的设置
- QT 按钮图片的设置
- 统一设置返回按钮为自定义图片
- IOS 自定义tabbar,并给tabbar按钮加载网络图片
- IOS 自定义tabbar,并给tabbar按钮加载网络图片
- Android 自定义Notification通知样式并设置按钮监听.
- 自定义Qt按钮
- 自定义Qt按钮
- 自定义QT按钮
- 自定义QT按钮
- Qt自定义按钮
- 自定义Qt按钮
- 自定义Qt按钮
- Qt 自定义按钮
- Qt自定义按钮
- Qt自定义标签按钮
- QT 按钮图片
- 【面经笔记】
- Caffe添加自定义层-自定义loss
- 字段数据类型
- 卷积深入浅出
- Unity3D简单实现游戏对象跟随鼠标旋转
- Qt自定义图片按钮并设置方向
- 某笔试题二(socket)
- 判断单链表是否带环?若带环,求环的长度,求环的入口点
- MAVLink—最强大的微型飞行器通信协议
- 数字串重排后输出最小数据 java
- Mysql学习之路06-外键
- 关于调用Dao层Save方法后产生Write operations are not allowed in read-only mode (FlushMode.MANUAL)错误导致访问页面显示404
- python初学温度转换实例讲解
- [ZJOI2007]时态同步(树形DP+DFS)