300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > qt中继承pushbutton自定义控件设置按钮样式

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

时间:2021-01-23 03:30:14

相关推荐

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

提要

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

实现

在自定义的控件类中添加Q_OBJECT宏

在自定义的控件的类中重写paintevent函数

自定义的控件在使用时,必须指明其父对象

使用样式表设置样式,将类名改为自定义的类名

例子

直接上代码

myButton.h

#ifndef MYBUTTON_H#define MYBUTTON_H#include <QWidget>#include <QPushButton>class myButton : public QPushButton{Q_OBJECTpublic: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);//设置场景按钮idprotected:void paintEvent(QPaintEvent *e);void mousePressEvent(QMouseEvent *e);private:int m_index;//按钮的下标,用于区别点击的是哪个按钮intm_id;//按钮的idQStringm_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);

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。