精华内容
下载资源
问答
  • Qt自定义控件13:继承QPushButton自绘按钮 先看效果图: 思路:新建类继承QPushButton,重写paintEvent方法,根据需求画出界面。(效果图是通过拖的QPushButton控件,然后提升为我的自定义类进行操作) 关键代码: ...

    Qt自定义控件13:继承QPushButton自绘按钮

    先看效果图:在这里插入图片描述

    思路:新建类继承QPushButton,重写paintEvent方法,根据需求画出界面。(效果图是通过拖的QPushButton控件,然后提升为我的自定义类进行操作)

    关键代码:

    CMButton::CMButton(QWidget *parent) :QPushButton(parent)
    {
        setCheckable(true);
        QFontMetrics fontMetrics(font());
        int nFontWidth = fontMetrics.width(this->text());
        this->setMinimumWidth(nFontWidth+this->iconSize().width()+iconStartX);
        textStartX = iconSize().width()+iconStartX;
    }
    
    void CMButton::paintEvent(QPaintEvent *event){
        //绘制准备工作,启用反锯齿
        QPainter painter(this);
        painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
    
        drawBg(&painter);
        drawText(&painter);
        drawIcon(&painter);
        drawTri(&painter);
        drawLine(&painter);
    }
    
    void CMButton::drawBg(QPainter* painter){
        int width = this->width();
        int height = this->height();
        painter->save();
        if(isChecked()){
            painter->setBrush(checkBgColor);
        }else if(isHovered){
            painter->setBrush(hoverBgColor);
        }else{
            painter->setBrush(normalBgColor);
        }
        QRect rect(0,0,width,height);
        painter->setPen(Qt::NoPen);
        painter->drawRect(rect);
        painter->restore();
    }
    
    void CMButton::drawText(QPainter *painter){
        painter->save();
        QRect rect(textStartX,0,this->width(),this->height());
        if(isChecked()){
            painter->setPen(checkTextColor);
        }else if(isHovered){
            painter->setPen(hoverTextColor);
        }else{
            painter->setPen(normalTextColor);
        }
    
        QFont font = painter->font();
    //    font.setPixelSize(10);
        painter->setFont(font);
        painter->drawText(rect,Qt::AlignCenter,text());
        painter->restore();
    }
    
    void CMButton::drawIcon(QPainter *painter){
        painter->save();
        QRect rect(iconStartX,(this->height()-this->iconSize().height())/2,this->iconSize().width(),this->iconSize().height());
        QPixmap pixmap = this->icon().pixmap(this->iconSize());
        painter->drawPixmap(rect,pixmap);
        painter->restore();
    }
    
    void CMButton::drawTri(QPainter *painter){
        painter->save();
    
        painter->restore();
    }
    
    void CMButton::drawLine(QPainter *painter){
        painter->save();
        if(isChecked() || isHovered){
            QRect rect(0,0,5,this->height());
            painter->setPen(Qt::NoPen);
            painter->setBrush(lineColor);
            painter->drawRect(rect);
        }
    
        painter->restore();
    }
    
    void CMButton::enterEvent(QEvent *)
    {
        isHovered = true;
        update();
    }
    
    void CMButton::leaveEvent(QEvent *)
    {
        isHovered = false;
        update();
    }
    
    
    展开全文
  • QPushButton> class MyButton : public QPushButton { Q_OBJECT Q_PROPERTY(bool hover READ isHover WRITE setHover DESIGNABLE false) public: MyButton(QWidget *parent = nullptr); MyButton(co.

    在这里插入图片描述

    #ifndef MYBUTTON_H
    #define MYBUTTON_H
    
    #include <QPushButton>
    class MyButton : public QPushButton
    {
       
        Q_OBJECT
        Q_PROPERTY(bool hover READ isHover WRITE setHover DESIGNABLE false)
    
    展开全文
  • 自定义QPushButton按钮后,需要重写一下mouseEvent,结果发现按钮的clicked信号不会触发了: bool MyButton::eventFilter(QObject *watched, QEvent *event) { Q_UNUSED(watched); if(event->type() == ...

    自定义QPushButton按钮后,需要重写一下mouseEvent,结果发现按钮的clicked信号不会触发了:

    bool MyButton::eventFilter(QObject *watched, QEvent *event)
    {
        Q_UNUSED(watched);
        if(event->type() == QMouseEvent::MouseButtonPress)
        {
            timer->start(1000);
        }
        else if(event->type() == QMouseEvent::MouseButtonRelease)
        {
            timer->stop();
            return true;
        }
    
        return false;
    }
    
    void MyButton::timeout()
    {
        qDebug() << "timeout";
    }

    这里我是有个需求,需要在鼠标释放时去触发一个超时的处理,因此在MouseButtonRelease时使用return true拦截了该事件,但是同时也拦截了鼠标释放时发送的released()信号,这样就会无法再触发clicked信号了,文档中也有写到clicked信号触发的条件:pressed后还要released才能emit。

    尝试过手动emit released()信号也不行,目前只能手动调用click()的槽函数才能触发按钮的clicked信号了,后续有时间还需要仔细研究一下。

    展开全文
  • 本来是想学着做动态按键的,方法很多,可以很简单的。不过我复杂化了,当中在为自定义控件添加事件处理的。遇到了纠结的问题,为了实现信号槽,需要加上Q_Object宏,此后又出现了undefined reference vtable for xxx...
  • 继承QPushButton主要是向设置好看的按钮图片,但是没想到继承后却无法设置按钮菜单了。有解决方法吗。。。。 我尝试过在CPushButton中定义个QPushButton 。用这个QPushButton来设置菜单,并且在mouseReleaseEvent...
  • 本人萌新,QT也是刚学两天,我自定义了一个mybutton类,它继承QPushButton类,添加了三个函数使之可在窗口内移动。之后想增加一个槽,使放开按钮时关闭窗口,却发现无法实现该功能。请问是什么原因,以及应该如何...
  • QPushButton自动隐藏

    2021-04-26 16:24:13
    继承QPushButton,然后用setFlat重写enterEvent和leaveEvent(setHidden和setVisiable都会导致消失后再也找不到) autoFlatButton.h #include <QPushButton> class autoFlatButton : public QPushButton { ...

    继承QPushButton,然后用setFlat重写enterEvent和leaveEvent(setHidden和setVisiable都会导致消失后再也找不到)

    autoFlatButton.h

    #include <QPushButton>
    
    class autoFlatButton : public QPushButton
    {
    public:
        autoFlatButton(QWidget *parent = nullptr);
        ~autoFlatButton() override;
    
    private:
        void enterEvent(QEvent *event) override;
        void leaveEvent(QEvent *event) override;
    };
    

    autoFlatButton.cpp

    #include "autoflatbutton.h"
    
    autoFlatButton::autoFlatButton(QWidget *parent)
        :QPushButton(parent)
    {
    
    }
    
    autoFlatButton::~autoFlatButton()
    {
    
    }
    
    void autoFlatButton::enterEvent(QEvent *event)
    {
        Q_UNUSED(event)
        setFlat(false);
    }
    
    void autoFlatButton::leaveEvent(QEvent *event)
    {
        Q_UNUSED(event)
        setFlat(true);
    }
    
    展开全文
  • QPushButton

    2021-01-24 22:29:26
    QPushButton介绍
  • qt 自定义外形 qpushbutton

    千次阅读 2014-09-29 13:17:59
    以圆钮为例,个人猜想: 方法一)png皮肤法 1、皮肤里放个圆的png图片;通过皮肤设置,让按钮呈现出圆形;并且点圆周外,无任何反应。 ...方法二)png图片法 ...2、继承QPushButton,在QMyPushButton重绘按钮。
  • QT:QPushButton实现双击效果

    千次阅读 2019-03-28 09:47:50
    只需继承QPushButton再重写mouseDoubleClickEvent()函数即可。这里判断了左键双击发出一个自定义信号doubleClicked()。 class Mybtn :public QPushButton { Q_OBJECT public: explicit Mybtn(QWidget *parent....
  • 给QPushButton添加右键菜单,其中ActionsContextMenu相对比较方便...只需要继承QPushButton,然后设置使用Actions Context菜单,创建自己需要的QAction,addAction并且将对应的槽函数和action连接起来,就可以实现了。
  • 目录1.简述2.解决思路3.代码 1.简述 QPushButton{backgroud:red;} QPushButton:pressed{backgroud:gray;} ...但是触摸不松开,按钮一直的红色的,没有按下效果。...继承QPushButton,设置接受触摸事件,重写
  • 1. 自定义一个继承QPushbutton的类RightClickButton,需要带右击功能的按钮对象则从该类中产生 2. 在类中设定一个带参信号clickedSignal,参数用于区分单击和右击,本文以bool类型的参数为例。 3. 重载类中的...
  • QPushButton按钮

    2019-02-07 05:23:00
    需要 from PyQt5.QtWidgets import QPushButton继承 QObject-->QWidget-->QAbstractButton-->QPushButton创建按钮控件:QPushButton() 创建一个无父控件的按钮控件QPushButton(parent) 创建控件的同时, ...
  • 3.方法三:继承QPushButton类,自定义MyQPushBtn类。 扩展:对象树 二、自定义信号和槽 1.无参信号和槽 a.信号 b.槽 c.信号和槽的关系 2.关联无参信号和槽 3.信号和槽的重载 4.关联有重载的信号和槽 5....
  • 28.QPushButton

    2021-07-16 10:07:19
    QPushButton继承自QAbstracButton 目录 1创建按钮控件 1.1QPushButton() 创建一个无父控件的按钮控件 1.2QPushButton()创建控件的同时,设置父控件 1.3QPushButton(text,parent) 创建控件的同时,设置提示文本...
  • Qt常用类QPushButton

    千次阅读 2017-10-10 18:16:55
    QPushButton 类代表按钮,它继承了 QAbstractButton 类,因此也有其全部的属性、信号和槽。      构造  QPushButton 类支持以下构造函数: [plain] view plain copy ...
  • QPushButton:QAbstractButton 菜单 设置菜单 setMenu(QMenu)   获取菜单 menu()   展示菜单 showMenu()   行为 QAction(Qicon(),"文字",QMenu)   添加行为 QMenu....
  • 继承QPushButton后的按钮,设置其样式。 实现 在自定义的控件类中添加Q_OBJECT宏 在自定义的控件的类中重写paintevent函数 自定义的控件在使用时,必须指明其父对象 使用样式表设置样式,将类名改为自定义的类名 ...
  • QPushButton 点击信号分析 QPushButton 点击信号分析 QPushButton有三个很重要的信号跟点击有关 pressed clicked toggled ...toggled好像有时候触发,有时候不触发,到底...首先,这三个信号都是从QAbstractButton继承...
  • QPushButton 点击信号分析 QPushButton有三个很...首先,这三个信号都是从QAbstractButton继承来的,也就是说,下面情况对QAbstractButton的所有子类都适用, 先来看第一个问题 pressed和clicked,可以编写一段代码
  • pyqt5 按钮QPushButton

    千次阅读 2019-06-19 18:07:56
    Button的基类QAbstractButton,提供button的...常见的Button包括,QPushButton,QToolButton,QRadioButton及QCheckBox。这些Button类均继承自QAbstractButton类,根据各自的使用场景通过图形展现出来。 抽象类 Q...
  • 思路:QPushButton继承于QWidget,可以将其看做一个QWidget,在其上放置一个Qlabel进行布局即可。 QPushButton* btn = new QPushButton(this); // 设置label为红色圆形 QLabel* lab = new QLabel(btn,"123"); const...
  • QSS之QPushButton 详细介绍

    万次阅读 多人点赞 2018-05-06 02:03:58
    官方参考资料 ...QPushButton { /* 前景色 */ color:red; /* 背景色 */ background-color:rgb(30,75,10); /* 边框风格 */ border-style:outset; /* 边框宽度 */ border-width:2px; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,970
精华内容 2,388
关键字:

继承qpushbutton