QPushButton

功能

提供一个命令按钮,继承于QWidget

常用信号

    void pressed();
    void released();
    void clicked(bool checked = false);
    void toggled(bool checked);

常用接口

    void setText(const QString &text);
    QString text() const;

    void setIcon(const QIcon &icon);
    QIcon icon() const;

小试一下

创建一个窗口,实现点击QPushButton关闭窗口

class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public slots:
   void  slot_close();
};
#include "widget.h"
#include <QPushButton>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton* pBtn = new QPushButton("close",this);
    connect(pBtn,SIGNAL(clicked()),this,SLOT(slot_close()));
}
void Widget::slot_close()
{
    close();
}

给按钮加快捷键

方式1:设置文本时指定指定“Alt+快捷键”,忽略大小写

  QPushButton* pBtn = new QPushButton("&close",this);

方式2:
调用接口setShortcut

 pBtn->setShortcut(QKeySequence("Ctrl+A"));

也可以使用一些默认的快捷键,如打印接口

 pBtn->setShortcut(QKeySequence(QKeySequence::Print));

方式3:定义QShortcut

  QShortcut *key = new QShortcut(QKeySequence(Qt::Key_Escape),this);
  connect(key, SIGNAL(activated()), pBtn, SLOT(click()));

按Esc按键时会触发按钮的clicked信号

给按钮加菜单

  QMenu* pMenu = new QMenu;
  pMenu->addAction("test1");
  pMenu->addAction("test2");
  pBtn->setMenu(pMenu);

给QPushButton加菜单

来美化下按钮

可以通过qss美化下按钮

感受下按钮美化

设置按钮文字颜色

  pBtn->setStyleSheet("color:red");

设置按钮文字颜色

设置按钮图标

通过接口设置

 QPushButton* pBtn = new QPushButton("&add",this);
 pBtn->setIcon(QIcon(":/add.png"));

通过样式设置

QPushButton:hover{border: 0px ; background: url(":/set.png") no-repeat  center  rgb(0, 170, 127);}
QPushButton{border: 0px ; background: url(":/set_click.png") no-repeat  center  rgb(0, 170, 127);}
   pBtn->setStyleSheet(
                       "background-image: url(:/add.png);"
                       "background-position:left;"
                       "background-repeat:no-repeat;");

按钮大小,按下,划过时的样式

QPushButton
{
background-color: #219FF6;
color: rgb(255, 255, 255);
padding: 0px;
min-width: 120px;
min-height:40px;
max-width: 120px;
max-height: 40px;
font-size: 20px;
border-radius:5px;
border-style:solid;
}
QPushButton:hover 
{ 
background-color:#22A4FE;
}
QPushButton:pressed
{
background-color:#1977B9;
}

美化后的QPushbutton
详细点注释

QPushButton {  
    /* 前景色 */  
    color:red;  

    /* 背景色 */  
    background-color:rgb(30,75,10);  

    /* 边框风格 */  
    border-style:outset;  

    /* 边框宽度 */  
    border-width:2px;  

    /* 边框颜色 */  
    border-color:rgb(10,45,110);  

    /* 边框倒角 */  
    border-radius:10px;  

    /* 字体 */  
    font:bold 14px;  

    /* 控件最小宽度 */  
    min-width:100px;  

    /* 控件最小高度 */  
    min-height:20px;  

    /* 内边距 */  
    padding:4px;  
}  

/* 鼠标按下时的效果 */  
QPushButton#pushButton:pressed {  
    /* 改变背景色 */  
    background-color:rgb(40,85,20);  

    /* 改变边框风格 */  
    border-style:inset;  

    /* 使文字有一点移动 */  
    padding-left:6px;  
    padding-top:6px;  
}  

/* 按钮样式 */  
QPushButton:flat {  
    border:2px solid red;  
}  

/* 当按钮打开菜单时:ui->pushButton->setMenu(btnMenu) */  
QPushButton:open{  
    background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #dadbde, stop: 1 #f6f7fa);  
}  

/* 子选择器:菜单 */  
QPushButton::menu-indicator {  
    image:url(:/images/close.png);  

    /* 去掉小三角号   
    image:none;*/  

    /* 绘制subcontrol 的参考矩形的位置 */  
    subcontrol-origin:padding;  

    /* 小三角的位置 */  
    subcontrol-position:bottom right;  
}  

QPushButton::menu-indicator:pressed,QPushButton::menu-indicator:open {  
    position:relative;  
    top:4px;  
    left:4px;  
} 

其他:重绘按钮控件来实现按钮

void Widget::paintEvent(QPaintEvent*)
{
    QPainter painter(this);
    QStyleOptionButton btn;
    btn.text = "open";
    btn.state = QStyle::State_Enabled;
    btn.rect = QRect(100,500,100,32);
    QApplication::style()->drawControl(QStyle::CE_PushButton
                                       ,&btn,&painter);
}

重绘制按钮
QApplication::style()->drawControl可以指定绘制窗口,则我们可以来美化我们的按钮

1.绘制前先定义一个QPushButton,并做相关初始化,可在构造里面完成

  qApp->setStyleSheet(" ");
  m_btn = new QPushButton;
  m_btn->setStyleSheet("color:red");

2.修改我们的绘制

void Widget::paintEvent(QPaintEvent*)
{
    QPainter painter(this);
    QStyleOptionButton btn;
    btn.text = "open";
    btn.state = QStyle::State_Enabled;
    btn.rect = QRect(100,500,100,32);
    QApplication::style()->drawControl(QStyle::CE_PushButton
                                       ,&btn,&painter,m_btn);
}

在这里插入图片描述
重绘可能比较少用,但在QTableview代理重绘还是比较经常用到,通过绘制和自定义样式,可以实现较理想的效果
自定义QTableview

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值