qt中继承pushbutton自定义控件设置按钮样式

提要

继承QPushButton后的按钮,设置其样式。

实现

在自定义的控件类中添加Q_OBJECT宏
在自定义的控件的类中重写paintevent函数
自定义的控件在使用时,必须指明其父对象
使用样式表设置样式,将类名改为自定义的类名

例子

直接上代码
myButton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H#include <QWidget>
#include <QPushButton>class myButton : public QPushButton
{Q_OBJECT
public:myButton(int index,QWidget *parent = nullptr);~myButton();int getIndex();//获取按钮的下标void setSceneBtnId(int &id);//设置场景按钮的idvoid setSceneBtnName(QString &name);//设置场景按钮的名字void setSceneBtnNameId(int id,QString name);//设置场景按钮idint getSceneBtnId();//获取场景按钮idQString getScenBtnName();//获取场景按钮的名称void initBtnStyle();//设置按钮样式void getAdjustScreenRatio();//获取屏幕分辨率
public slots:void slot_setSceneBtnName(QString strName);//设置场景按钮的名称void slot_setSceneBtnId(int id);//设置场景按钮id
protected:void paintEvent(QPaintEvent *e);void mousePressEvent(QMouseEvent *e);
private:int m_index;//按钮的下标,用于区别点击的是哪个按钮int          m_id;//按钮的idQString      m_strName;//按钮的名称
};
#endif // MYBUTTON_H

myButton.cpp

#include "mybutton.h"
//#include "screenresolution.h"
#include <QMouseEvent>
#include <QStyleOption>
#include <QBitmap>
#include <QPixmap>
#include <QPainter>myButton::myButton(int index,QWidget *parent)
:QPushButton(parent),m_index(index)
{initBtnStyle();
}myButton::~myButton()
{}int myButton::getIndex()
{return m_index;
}void myButton::setSceneBtnId(int &id)
{m_id = id;
}void myButton::setSceneBtnName(QString &name)
{m_strName = name;
}void myButton::setSceneBtnNameId(int id, QString name)
{m_id = id;m_strName = name;
}int myButton::getSceneBtnId()
{return m_id;
}QString myButton::getScenBtnName()
{return m_strName;
}void myButton::getAdjustScreenRatio()
{}void myButton::initBtnStyle()
{QPixmap pixmap;QBitmap bit;pixmap.load(":/new/prefix1/images/sceneBtn.png");pixmap = pixmap.scaled(QSize(181 ,74),Qt::KeepAspectRatio);setFixedSize(pixmap.size());bit = pixmap.mask();setMask(bit);this->setStyleSheet("myButton{background-color:transparent;""border-image: url(:/new/prefix1/images/sceneBtn.png);""border: 1px solid #0D79FF;opacity: 0.7;""font-size: 18px;font-family: Microsoft YaHei;""font-weight: 400;color: #FFFFFF;}""myButton:pressed{border-image: url(:/new/prefix1/images/sysbtnPressed.png);""font-size: 18px;font-family: Microsoft YaHei;""font-weight: 400;color: rgba(255, 255, 255, 0.8);line-height: 18px;}");
}void myButton::slot_setSceneBtnName(QString strName)
{m_strName = strName;
}void myButton::slot_setSceneBtnId(int id)
{m_id = id;
}void myButton::paintEvent(QPaintEvent *e)
{Q_UNUSED(e);QStyleOption opt;opt.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);QPushButton::paintEvent(e);
}void myButton::mousePressEvent(QMouseEvent *e)
{if(e->button() == Qt::RightButton){//创建编辑框,若已经创建则直接显示,绑定编辑框与按钮来存储修改的信息}QPushButton::mousePressEvent(e);
}

以上就是自定义控件的类,其使用如下,附上关键代码:

    myButton *btn = new myButton(0, this);//指出父类btn->setText("自定义类");btn->setGeometry(0,0,200,200);

以上就是自定义控件样式的设置。由于我重写鼠标点击事件的时候,忘记了父类的鼠标点击事件导致事件没有传递下去,从而没有出现点击后的效果,纠结了许久,终得解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis-Plus_实体作为条件构造器构造方法的参数

查询专栏&#xff1a;MP默认查询原则 查询的是数据库列名非实体类属性。 实体作为条件构造器构造方法的参数 文章目录/*** 1.传递的参数如果是实体类* <p>* 注&#xff1a;这种情况传递过来的参数是等值的也就是* 如果不想等值&#xff0c;例如:like 条件* 在实体类中,需…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于概率预测与随机响应面法的新能源孤岛配电网实时风险评估与调控策略》

这个标题涉及到新能源孤岛配电网的实时风险评估与调控策略&#xff0c;其中使用了概率预测和随机响应面法。下面是对标题中各个要素的解读&#xff1a; 新能源孤岛配电网&#xff1a; 新能源&#xff1a; 指的是可再生能源&#xff0c;如太阳能、风能等&#xff0c;与传统的化石…

Open Infrastructure开启开放协作新时代

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;在丹佛举办的Open Infrastructure Summit大会的Keynote演讲中&#xff0c;OpenStack基…

Qt中绑定信号槽之后,信号槽无效

下面程序编译没有错误&#xff0c;运行却未达到想要的效果&#xff0c;最后调试发现&#xff0c;是信号槽绑定后无效&#xff0c;即槽函数没有受到信号的触发。具体代码如下&#xff1a; main.cpp #include <QtCore> #include "controller.h" #include "…

MyBatis-Plus_查询返回实体对象还是map?

在常见场景下&#xff1a;返回数据建议使用map&#xff0c;不建议使用实体对象 /*** 1. 名字包含雨并且年龄小于40* sql&#xff1a;name like %雨% and age < 40* <p>* 应用场景&#xff1a;* 当表字段非常多&#xff0c;但是你只需要查询少数几列,* 没必要返回的泛型…

图解分布式架构的发展和演进 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;编注: 架构决定的系统的稳定性&#xff0c;扩展性和并发性&#xff0c;架构的演进是从…

qt中颜色对话框弹出时应用程序输出栏出现QWindowsWindow::setGeometry: Unable to set geometry 180x30+345+311 (frame: 202x8

引言 在项目中点击按钮&#xff0c;弹出颜色选择对话框&#xff0c;但同时应用程序会在应用程序输出一栏中显示 QWindowsWindow::setGeometry: Unable to set geometry 180x30345311 (frame: 202x86334266) on QWidgetWindow/"QColorDialogClassWindow" on "\…

MyBatis-Plus_LambdaQueryWrapper

查询专栏&#xff1a;建议使用LambdaQueryWrapper&#xff0c;防误写 /*** 这样写的好处防误写*/Testpublic void selectLambda() { // LambdaQueryWrapper<User> lambda new QueryWrapper<User>().lambda(); // LambdaQueryWrapper<User> lambdaQuer…

Hadoop精华问答 | 如何设置单个任务占用的内存量和CPU数目?

我们很荣幸能够见证Hadoop十年从无到有&#xff0c;再到称王。感动于技术的日新月异时&#xff0c;让我们再来看看关于Hadoop的精华问答。1Q&#xff1a;默认情况下&#xff0c;各个节点的负载不均衡&#xff08;任务数目不同&#xff09;&#xff0c;有的节点很多任务在跑&…

MyBatis-Plus_自定义sql

查询专栏&#xff1a;自定义查询sql 文章目录1. 在mapper接口中定义接口2. 在xml文件中书写sql3. 全局配置3.1 配置xml的位置3.2 配置实体类的位置4. 在实体类中测试5. 控制台输出1. 在mapper接口中定义接口 /*** 查询所有 有条件会自动拼接在where 后边当条件 单表操作** pa…

qt中下拉列表使用函数setCurrentText()设置当前显示值不能设置成功

解决方法 下拉列表设置当前显示的值&#xff0c;没有设置成功&#xff0c;是因为还需在设置前要设置下拉列表的可编辑属性为true&#xff0c;否则直接使用 函数setCurrentText&#xff08;&#xff09;设置不能成功。 const QString & strDefultSid m_sidStrList[0];//字…

Gartner:PaaS 和平台架构领域的 4 大趋势 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;Gartner公司已列出了2019年及以后影响平台即服务&#xff08;PaaS&#xff09;技术和平…

MyBatis-Plus_分页查询

查询专栏&#xff1a;myabtis 实现的分页为什么还要分页插件&#xff1f; 文章目录1. 创建分页插件2. 测试分页3. 自定义分页4. 测试自定义分页方法5. 控制台输出6. 多表操作1. 创建分页插件 Configuration public class MybatisPlusConfig {Beanpublic PaginationInterceptor…

qt设置滚动区域的滚动条的样式

引言 当窗口的控件太多&#xff0c;不能一下完全显示&#xff0c;就可以采用滚动区域来添加控件&#xff0c;这样添加的控件&#xff0c;可以通过滑动滚动区域的滚动条来浏览所有的控件。下面就大致记录一下滚动区域的滚动条的样式怎么设置。 实现 直接上设置滚动区域的滚动…

MyBatis-Plus_更新操作

查询专栏&#xff1a;MP默认查询原则 查询的是数据库列名非实体类属性 文章目录Component public class UserMapperUpdateTest extends MybatisPlusSamplesChapter1ApplicationTests {Resourceprivate UserMapper userMapper;Testpublic void updateById(){User user new User…

什么叫云原生应用?| 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;吕建伟转自&#xff1a;阿朱说&#xff08;1&#xff09;从Function到…

qt中设置父窗口中某一控件样式后,子窗口中某一控件也随父控件样式

引言 创建的窗口中含有滚动区域&#xff0c;滚动区域创建了很多按钮&#xff0c;点击按钮后弹出一个弹框&#xff0c;当设置了滚动区域的中心窗口的背景样式后&#xff0c;之前设置好的点击后按钮弹出框的背景样式也跟随着变化了。 方法 究其原因是因为滚动区域的窗口与点击…

MyBatis-Plus_删除操作

删除专栏 文章目录Component public class UserMapperDelTest extends MybatisPlusSamplesChapter1ApplicationTests {Resourceprivate UserMapper userMapper;/*** 根据 ID 删除*/Testpublic void delById() {int rows userMapper.deleteById(1094592041087729666L);System.o…

拙见之drawPath()与fillPath

阐述 此文仅记录标题中说的函数drawPath与fillPath的一点区别。 编写项目的过程中发现drawPath可以根据对画笔和画刷的设置&#xff0c;所绘制的图形含有边框和内部填充颜色&#xff0c;而fillPath即使设置了画笔和画刷的颜色&#xff0c;只会在绘制的图形中填充颜色&#xff…

MyBatis-Plus_AR 模式

查询专栏&#xff1a;MP默认查询原则 查询的是数据库列名非实体类属性 文章目录AR 模式1. 实体类对象继承Model2. 接口服务类继承baseMapper接口3. 测试ARAR 模式 1. 实体类对象继承Model EqualsAndHashCode(callSuper false) Data public class User extends Model<User…