日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/9/27 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt中继承pushbutton自定义控件设置按钮样式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

提要

繼承QPushButton后的按鈕,設(shè)置其樣式。

實現(xiàn)

在自定義的控件類中添加Q_OBJECT宏
在自定義的控件的類中重寫paintevent函數(shù)
自定義的控件在使用時,必須指明其父對象
使用樣式表設(shè)置樣式,將類名改為自定義的類名

例子

直接上代碼
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);//設(shè)置場景按鈕的idvoid setSceneBtnName(QString &name);//設(shè)置場景按鈕的名字void setSceneBtnNameId(int id,QString name);//設(shè)置場景按鈕idint getSceneBtnId();//獲取場景按鈕idQString getScenBtnName();//獲取場景按鈕的名稱void initBtnStyle();//設(shè)置按鈕樣式void getAdjustScreenRatio();//獲取屏幕分辨率 public slots:void slot_setSceneBtnName(QString strName);//設(shè)置場景按鈕的名稱void slot_setSceneBtnId(int id);//設(shè)置場景按鈕id protected:void paintEvent(QPaintEvent *e);void mousePressEvent(QMouseEvent *e); private:int m_index;//按鈕的下標,用于區(qū)別點擊的是哪個按鈕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){//創(chuàng)建編輯框,若已經(jīng)創(chuàng)建則直接顯示,綁定編輯框與按鈕來存儲修改的信息}QPushButton::mousePressEvent(e); }

以上就是自定義控件的類,其使用如下,附上關(guān)鍵代碼:

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

以上就是自定義控件樣式的設(shè)置。由于我重寫鼠標點擊事件的時候,忘記了父類的鼠標點擊事件導(dǎo)致事件沒有傳遞下去,從而沒有出現(xiàn)點擊后的效果,糾結(jié)了許久,終得解決。

總結(jié)

以上是生活随笔為你收集整理的qt中继承pushbutton自定义控件设置按钮样式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。