功能
提供一个命令按钮,继承于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);
来美化下按钮
可以通过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 {
/* 前景色 */
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代理重绘还是比较经常用到,通过绘制和自定义样式,可以实现较理想的效果