QToolButton(2)

2023-12-14 17:01
文章标签 qtoolbutton

本文主要是介绍QToolButton(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 解决QToolButton Icon没有悬浮样式的问题

#ifndef CTOOLBUTTONSTYLE_H
#define CTOOLBUTTONSTYLE_H
#include <QProxyStyle>
#include <QToolButton>class CToolButton;
class CToolButtonStyle : public QProxyStyle
{Q_OBJECTpublic:CToolButtonStyle(QToolButton* parent);virtual void drawItemPixmap(QPainter* painter, const QRect& rect, int, const QPixmap& pixmap) const override;virtual void drawItemText(QPainter* painter, const QRect& rect, int flags, const QPalette& pal, bool enabled,const QString& text, QPalette::ColorRole textRole = QPalette::NoRole) const override;
private:CToolButton* m_pButton;
};#endif
#include "CButtonStyle.h"
#include "CToolButton.h"
#include <QPixmap>CToolButtonStyle::CToolButtonStyle(QToolButton* parent): QProxyStyle()
{setParent(parent);m_pButton = dynamic_cast<CToolButton*>(parent);
}void CToolButtonStyle::drawItemPixmap(QPainter* painter, const QRect& rect, int, const QPixmap& pixmap) const
{QPixmap tmpPixmap;if(m_pButton->curStatus()==CToolButton::ButtonStatus::NORMAL){tmpPixmap.load(m_pButton->getNormalIconPath());}else if(m_pButton->curStatus()==CToolButton::ButtonStatus::HOVER){tmpPixmap.load(m_pButton->getHoverIconPath());}QProxyStyle::drawItemPixmap(painter, rect, Qt::AlignCenter, tmpPixmap);
}void CToolButtonStyle::drawItemText(QPainter* painter, const QRect& rect, int flags, const QPalette& pal,bool enabled, const QString& text, QPalette::ColorRole textRole) const
{QProxyStyle::drawItemText(painter, rect, flags | Qt::AlignCenter, pal, enabled, text, textRole);
}
#ifndef CTOOLBUTTON_H
#define CTOOLBUTTON_H
#include <QToolButton>class CToolButtonStyle;
class CToolButton : public QToolButton
{Q_OBJECTQ_PROPERTY(QString normalIconPath READ getNormalIconPath WRITE setNormalIconPath)Q_PROPERTY(QString hoverIconPath READ getHoverIconPath WRITE setHoverIconPath)public:enum ButtonStatus{NORMAL = 0,HOVER};public:CToolButton(QWidget* parent = nullptr);CToolButton(const QString& text, QWidget* parent = nullptr);ButtonStatus curStatus()const{return m_btnStatus;}QString getNormalIconPath();void setNormalIconPath(const QString& strIconPath);QString getHoverIconPath();void setHoverIconPath(const QString& strIconPath);protected:virtual void leaveEvent(QEvent* event) override;virtual void enterEvent(QEvent* event) override;private:ButtonStatus m_btnStatus;QPixmap m_pixmap;QString m_normalImagePath;QString m_hoverImagePath;CToolButtonStyle* m_pToolBtnStyle;
};#endif
#include "CToolButton.h"
#include <QEvent>
#include "CButtonStyle.h"CToolButton::CToolButton(QWidget* parent): CToolButton("", parent)
{
}CToolButton::CToolButton(const QString& text, QWidget* parent): QToolButton(parent), m_btnStatus(ButtonStatus::NORMAL), m_pToolBtnStyle(nullptr)
{setText(text);m_pToolBtnStyle = new CToolButtonStyle(this);setStyle(m_pToolBtnStyle);
}QString CToolButton::getNormalIconPath(){return m_normalImagePath;}void CToolButton::setNormalIconPath(const QString& strIconPath)
{m_normalImagePath = strIconPath;
}QString CToolButton::getHoverIconPath()
{return m_hoverImagePath;
}void CToolButton::setHoverIconPath(const QString &strIconPath)
{m_hoverImagePath=strIconPath;
}void CToolButton::leaveEvent(QEvent* event)
{m_btnStatus = ButtonStatus::NORMAL;QToolButton::leaveEvent(event);
}void CToolButton::enterEvent(QEvent* event)
{m_btnStatus = ButtonStatus::HOVER;QToolButton::enterEvent(event);
}

 

 使用方法:

 CToolButton *button=new CToolButton(this);button->setObjectName("MyButton");button->setGeometry(100,200,70,32);button->setPopupMode(QToolButton::InstantPopup);button->setMenu(menu1);
QToolButton#MyButton
{qproperty-icon: url(:/file_pressed.png) center;qproperty-normalIconPath: url(:/file_hover.png);qproperty-hoverIconPath: url(:/file_pressed.png);qproperty-iconSize: 18px 18px;qproperty-toolButtonStyle:ToolButtonTextBesideIcon;background-color:transparent;qproperty-text:"文件"; border:none;
}
QToolButton#MyButton:hover
{color:blue;
}
QToolButton#MyButton:pressed
{color:red;
}
QToolButton::menu-indicator{width:0px;}/*去掉右下方的三角*/

 

这篇关于QToolButton(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/493329

相关文章

QToolButton 和 QPushButton的区别和联系

在 Qt 框架中,QToolButton 和 QPushButton 都是按钮控件,用于用户交互,但它们在设计目的和用法上有一些不同。以下是它们的区别和联系: QToolButton 主要用途:通常用于工具栏或其他需要简洁按钮的场景。 外观:默认外观较为简洁,可以显示图标、文字或两者。通常会以图标为主,文字为辅。 功能: 支持菜单功能,可以在按钮上显示下拉菜单。可以在工具栏、浮动工具窗口

QToolButton的特殊使用

QToolButton的特殊使用 介绍通过QSS取消点击时的凹陷效果点击时的凹陷效果通过QSS取消点击时的凹陷效果 介绍 该篇文章记录QToolButton使用过程中的特殊用法。 通过QSS取消点击时的凹陷效果 点击时的凹陷效果 通过QSS取消点击时的凹陷效果 #include <QToolButton>#include <QMessageBox>Widget::

QToolButton更平滑

QToolButton会有一个下沉的样式,如何去掉?增加如下样式即可: QToolButton{ border:none; }

QToolButton入门

QToolButton是Qt中的工具按钮类,通常用于工具栏或工具栏中的下拉菜单。它可以显示图标、文本或同时显示两者,并可以响应用户的点击事件。以下是几个常见的QToolButton的用法示例: 显示图标: from PyQt5.QtWidgets import QToolButton, QMainWindow, QApplicationfrom PyQt5.QtGui import QIco

Qt6入门教程 14:QToolButton

目录 一.简介 二.常用接口 1.void setMenu(QMenu * menu) 2.void setPopupMode(ToolButtonPopupMode mode) 3.void setToolButtonStyle(Qt::ToolButtonStyle style) 4.void setArrowType(Qt::ArrowType type) 5.void s

PyQt5零基础入门(八)——按钮控件(QPushButton、QToolButton)

前言 按钮控件是图形用户界面(GUI)中常用的交互元素,用于触发特定的事件或行为。在Qt框架中,QPushButton和QToolButton是两种常用的按钮控件。 后边我们将以test.png为按钮图标,对比使用两种按钮控件。 普通按钮控件(QPushButton) QPushButton是一个标准的按钮控件,用户可以点击它来触发某个动作。当按钮被点击时,它会发出一个信号,可以通过连接到

[QT]QT教程之实例分析[三] 实现QQ抽屉效果(QToolBox 和QToolButton)

重点知识已近在代码里注释...请仔细看代码本文原创转载请保留此链接  http://blog.csdn.net/siren0203 头文件 drawer.h #ifndef DRAWER_H#define DRAWER_H#include <QToolBox>class QToolButton;#include <QObject>//QToolBox提供一种列状的层叠窗体clas

QtC++与QToolButton详解

介绍 QToolButton 是 Qt 中的一个控件类,用于创建工具按钮,它有以下主要作用和特点: 工具按钮: QToolButton 用于创建工具按钮,允许用户执行各种操作,如启动功能、弹出菜单、打开文件等。工具按钮通常用于用户界面中提供快速访问常用功能的途径。 多种工具按钮样式: QToolButton 提供多种按钮样式,包括纯文本按钮、带图标按钮、同时带有文本和图标的按钮等,以满足不

Qt、使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析

Qt、侧边栏(SideBar)的原理与实现(附Demo) 目录 Qt、侧边栏(SideBar)的原理与实现(附Demo)1、简介2、侧边栏控件组成3、UI布局4、代码实现界面的切换 Demo下载:https://gitee.com/jhuangBTT/QtSideBar 1、简介 侧边栏是一个很常用的导航控件,如Qt Creator软件本身也使用到了侧边栏