Qt圆角功能和状态组合按钮,可以显示颜色或者图片

使用两个按钮和一个Label封装了一个功能和状态圆角组合按钮,Label用来显示颜色或者图片。

实现的效果如下:

显示图片:

显示红色:

其中颜色或者图片是通过函数设置进去的。

两个按钮:前一个是状态按钮,可以Check,表示使用此项功能;后一个按钮是功能按钮,可以Check,表示跳转到此功能对应的选项。两个按钮都有信号,可以通过信号进行连接你需要的槽函数。

具体实现代码:

#include <QPushButton>
#include <QLabel>

class QStateFunctionButton : public QWidget
{
	Q_OBJECT

public:
	QStateFunctionButton(QWidget *parent = 0);
	~QStateFunctionButton();

	void setColor(const QColor &color);
	void setImage(const QImage &image);
	void setText(const QString &text);

signals:
	void stateButtonClicked(bool bClicked);
	void functionButtonClicked(bool bClicked);

private:
	QPushButton *m_stateButton;//状态按钮
	QPushButton *m_functionButton;//功能按钮
	QLabel *m_colorImageLabel;//显示图片或者颜色
};
#include "QStateFunctionButton.h"
#include <QHBoxLayout>
#include <QPainter>

QStateFunctionButton::QStateFunctionButton(QWidget *parent)
	: QWidget(parent)
{
	m_stateButton = new QPushButton(this);
	m_functionButton = new QPushButton(this);
	m_colorImageLabel = new QLabel(this);

	m_stateButton->setCheckable(true);
	m_stateButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
	m_stateButton->setStyleSheet("QPushButton{border:2px groove gray; border-top-left-radius:16px;border-bottom-left-radius:16px;border-style: outset;}"
		"QPushButton:checked{background-color:rgb(85, 170, 255);}");
	m_functionButton->setCheckable(true);
	m_functionButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
	m_functionButton->setStyleSheet("QPushButton{border:2px groove gray; border-top-right-radius:16px;border-bottom-right-radius:16px;border-style: outset;}"
		"QPushButton:checked{background-color:rgb(85, 170, 255);}");
	m_colorImageLabel->setScaledContents(true);
	m_colorImageLabel->setFrameShadow(QFrame::Sunken);
	m_colorImageLabel->setFrameShape(QFrame::Shape::Panel);

	QHBoxLayout *pHBox = new QHBoxLayout(this);
	pHBox->setSpacing(0);
	pHBox->setContentsMargins(0, 0, 0, 0);

	pHBox->addWidget(m_stateButton, 1);
	pHBox->addWidget(m_functionButton, 3);
	pHBox->addWidget(m_colorImageLabel, 1);

	connect(m_stateButton, &QPushButton::clicked, this, &QStateFunctionButton::stateButtonClicked);
	connect(m_functionButton, &QPushButton::clicked, this, &QStateFunctionButton::functionButtonClicked);

	setColor(QColor(0, 0, 0, 255));
}

QStateFunctionButton::~QStateFunctionButton()
{

}

void QStateFunctionButton::setColor(const QColor &color)
{
	m_colorImageLabel->setAutoFillBackground(true);
	QPalette pal = m_colorImageLabel->palette();
	pal.setColor(QPalette::Background, color);
	m_colorImageLabel->setPalette(pal);
}

void QStateFunctionButton::setImage(const QImage &image)
{
	QPixmap pixmap = QPixmap::fromImage(image).scaled(m_colorImageLabel->width(),
		m_colorImageLabel->height(),
		Qt::IgnoreAspectRatio,
		Qt::SmoothTransformation);
	m_colorImageLabel->setPixmap(pixmap);
}

void QStateFunctionButton::setText(const QString &text)
{
	m_functionButton->setText(text);
}

交流qq:1245178753

本文地址:http://blog.csdn.net/u011417605/article/details/51706166

源码下载:http://download.csdn.net/detail/u011417605/9552226

时间: 2024-10-10 18:08:44

Qt圆角功能和状态组合按钮,可以显示颜色或者图片的相关文章

编写html与js交互网页心得:编写两个按钮切换显示不同的图片

第一步:先建立一个html网页,如下: <!DOCTYPE html><html> <head>  <meta charset="utf-8" />  <title></title> </head> <body>  <div>   <div>        <input class="btnhy1" type="button&quo

Android 实现对话框圆角功能

Android 实现自定义dialog圆角功能 刚接触公司的Android项目,客户画好了界面,需求如下: 弹出的窗口是要四个圆角,并且标题栏颜色和下方不一样,还要以蓝色线分隔开,通过网上各种百度,给出的方案基本上是在/drawable文件夹下建立一个shape文件,里面对控件进行一些控制.(这里要注意的是shape文件应该是放在drawable文件夹下,至于为什么要放到这里,以及根元素下的各种元素用法,请参考这位前辈的博客:http://blog.csdn.net/lonelyroamer/a

Android 图形状态组合的应用 (笔记 )

目的:创建按钮,当按钮使按钮有不同的形状状态     在res下drawable-hdpi保存按钮初始状态left.png和按钮按下后的状态图片rigth.png.          将图片文件拖到创建好的文件夹drawable-hdpi中          创建一个一般的XML文件,新建图形状态组合步骤为     drawable_change → New → Other... → XML → XML File           注意:将Left_Rigth.XML 改成 left_righ

js的prototype扩展的一个例子,模仿C#的StringBuilder功能,数组组合字符串,效率大于+拼凑

function StringBuilder() { this._strings_ = new Array;}StringBuilder.prototype.append = function (str) { this._strings_.push(str);};StringBuilder.prototype.toString = function () { return this._strings_.join("");}; js的prototype扩展的一个例子,模仿C#的Strin

关于Google圆角高光高宽自适应按钮及其拓展

关于Google圆角高光高宽自适应按钮及其拓展————源自张鑫旭css讲解 这篇文章发布于 2009年10月24日,星期六,18:08,归类于 css相关. 阅读 48770 次, 今日 1 次 by zhangxinxu from http://www.zhangxinxu.com本文地址: http://www.zhangxinxu.com/wordpress/?p=292 一.前言对于一门技术而言,要想达到真正的高度,需要形成自己关于这门技术的世界观.我在研究css上花费的功夫相对多些,但

thinkpad 睡眠唤醒后热键功能正常,但屏幕无法显示状态/进度条/图标

由于博主比较习惯笔记本开盖即用,合盖即走,不大习惯开机关机(毕竟SSD速度杠杠滴^_^).可是发现笔记本长时间睡眠乃至休眠唤醒后,使用thinkpad热键,虽然可以调节,但屏幕不显示调节状态了.解决步骤如下: 1. 在桌面鼠标右键,选择[屏幕分辨率],如果无此选项,打开控制面板,“排列方式”选择“小图标”,选择“显示”选项,找到[屏幕分辨率设置]. 2. 在弹出窗口中,选择[高级设置] 3. 在弹出窗口中,切换到[屏幕显示]选项卡,确保[启用屏幕显示]为勾选状态,先将[数字锁定和大小写锁定的指示

Egret 中实现3种状态切换按钮

一.游戏中的常用3种状态按钮 Egret种提供了2种状态切换的按钮ToggleButton. 但是在游戏中常用到3种状态的按钮,比如任务系统的领取.已领取.未领取. 比如下图中宝箱的打开.浏览后打开.邀请后打开 二.利用eui.Button来实现3种状态切换按钮 测试用素材 继承eui.Button,并实现3种状态切换按钮 /** * 三种状态切换按钮 * @author chenkai 2018/8/8 */ class ThreeButton extends eui.Button{ publ

TERSUS画画一样开发软件 显示元件介绍-按钮类显示元件

TERSUS无代码手机电脑管理类软件开发,其中可拖放使用的按钮类显示元件包括:按钮(Button)元件.按钮组(Button Group)元件. 按钮(Button)元件:用户在前端可以直接看到一个带名称的按钮,点击后可执行一个逻辑处理的元件,其默认的结构如下图,是开发时拖放一个按钮后双击进入按钮看到的样子: 1.按钮本身会默认一个名称,同一父元件内放第一个时显示"Button",第二个会显示为"Button 2",按钮可以改名(快捷键"f2"或

tabbar选中按钮的标题颜色和字体

@implementation XMGTabBarController /* 问题: 1.选中按钮的图片被渲染 -> iOS7之后默认tabBar上按钮图片都会被渲染 1.修改图片 2.通过代码 √ 2.选中按钮的标题颜色:黑色 标题字体大 -> 对应子控制器的tabBarItem 3.发布按钮显示不出来 */ // 只会调用一次 + (void)load { // 获取哪个类中UITabBarItem,appearance:只能在控件显示之前设置,才有作用 UITabBarItem *ite