前言
QPushButton按钮,很常用,总结一下。
按钮置灰,不可点击
ui->pushButton->setEnabled(false);
快捷键设置
ui->pushButton->setShortcut(QKeySequence(QLatin1String(“Alt+Shift+A”)));
按钮透明
ui->pushButton->setFlat(true);
default与autoDefault
void setDefault(bool);
void setAutoDefault(bool);
这俩个属性只在QDialog下有效,当在界面按下回车键的时候,
如果QDialog中有default设置为true的按钮,最新设为true的按钮的click将被触发,除非是其他的按钮正拥有焦点;
如果QDialog中没有default的按钮,其他的autoDefault拥有焦点,那么该拥有焦点的按钮被触发;
如果没有焦点,QDialog会自动选择一个按钮进行触发
按钮样式效果
在鼠标悬停,点击时想要显示不同的按钮样式效果,这里提供一种参考。
首先 button.h
#ifndef BUTTON_H
#define BUTTON_H
#include <QPushButton>
#include <QMouseEvent>
class Button : public QPushButton
{
Q_OBJECT
public:
explicit Button(QWidget *parent = NULL);
void setButtonIcon(QString normal_icon, QString hover_icon, QString click_icon);
void setButtonColor(QColor normal_color, QColor hover_color, QColor click_color);
protected:
void enterEvent(QEvent *event);//鼠标悬停时
void leaveEvent(QEvent *event);//鼠标离开时
void mousePressEvent(QMouseEvent *event);//鼠标点击时
private:
void setColor(QColor color);
private:
QString m_normal_icon;
QString m_hover_icon;
QString m_click_icon;
QColor m_normal_color;
QColor m_hover_color;
QColor m_click_color;
bool m_color=false;
};
#endif // BUTTON_H
button.cpp
#include "button.h"
#include <QPalette>
Button::Button( QWidget *parent)
: QPushButton(parent)
{
setFocusPolicy(Qt::NoFocus);
setFlat(true);
setAutoFillBackground(true);
}
void Button::setButtonIcon(QString normal_icon, QString hover_icon, QString click_icon)
{
m_normal_icon = normal_icon;
m_hover_icon = hover_icon;
m_click_icon = click_icon;
setIcon(QIcon(m_normal_icon));//设置默认图标
}
void Button::setButtonColor(QColor normal_color, QColor hover_color, QColor click_color)
{
m_color = true;
m_normal_color = normal_color;
m_hover_color = hover_color;
m_click_color = click_color;
setColor(normal_color);//设置默认颜色
}
//鼠标悬停时
void Button::enterEvent(QEvent *event)
{
setIcon(QIcon(m_hover_icon));
setColor(m_hover_color);
QPushButton::enterEvent(event);
}
//鼠标离开时
void Button::leaveEvent(QEvent *event)
{
setIcon(QIcon(m_normal_icon));
setColor(m_normal_color);
QPushButton::enterEvent(event);
}
//鼠标点击时
void Button::mousePressEvent(QMouseEvent *event)
{
if (Qt::LeftButton == event->button()){
setIcon(QIcon(m_click_icon));
setColor(m_click_color);
}
QPushButton::mousePressEvent(event);
}
void Button::setColor(QColor color)
{
if(!m_color)
return ;
QPalette palette = this->palette();
palette.setColor(QPalette::Button,color);
this->setPalette(palette);
}
使用时调用
void setButtonIcon(QString normal_icon, QString hover_icon, QString click_icon);
void setButtonColor(QColor normal_color, QColor hover_color, QColor click_color);
设置图标或者背景色
信号事件
[signal] void QAbstractButton::clicked()
[signal] void QAbstractButton::clicked(bool checked = false)
[signal] void QAbstractButton::pressed()
[signal] void QAbstractButton::released()
[signal] void QAbstractButton::toggled(bool checked)
clicked()和clicked(bool checked = false)信号:在按钮被点击时触发,两者的区别是一个会传递是否被选择的状态,一个不会。通常情况下,如果按钮没有打开可被选择的属性,两者无任何区别(checked等于false)。
pressed()信号:在按下时触发
released()信号:在松开时触发
toggled:按钮选择状态被改变时触发(未被选择----被选择、被选择----未被选择),要想能触发此信号,需要先打开可被选择的属性
看完代码演示就明白了:
首先关联事件,点击按钮看效果
connect(ui->pushButton,&QPushButton::clicked,this,[=](){
qDebug()<<"clicked";
});
connect(ui->pushButton,&QPushButton::clicked,this,[=](bool bl){
qDebug()<<"clicked:"<<bl;
});
connect(ui->pushButton,&QPushButton::pressed,this,[=](){
qDebug()<<"pressed" ;
});
connect(ui->pushButton,&QPushButton::released,this,[=](){
qDebug()<<"released" ;
});
connect(ui->pushButton,&QPushButton::toggled,this,[=](bool bl){
qDebug()<<"toggled:"<<bl ;
});
点击按钮会输出
pressed
released
clicked
clicked: false
再次点击输出
pressed
released
clicked
clicked: false
然后再设置setCheckable(true)后再点击按钮看效果
ui->pushButton->setCheckable(true);
connect(ui->pushButton,&QPushButton::clicked,this,[=](){
qDebug()<<"clicked";
});
connect(ui->pushButton,&QPushButton::clicked,this,[=](bool bl){
qDebug()<<"clicked:"<<bl;
});
connect(ui->pushButton,&QPushButton::pressed,this,[=](){
qDebug()<<"pressed" ;
});
connect(ui->pushButton,&QPushButton::released,this,[=](){
qDebug()<<"released" ;
});
connect(ui->pushButton,&QPushButton::toggled,this,[=](bool bl){
qDebug()<<"toggled:"<<bl ;
});
点击按钮会输出
pressed
toggled: true
released
clicked
clicked: true
再次点击输出
pressed
toggled: false
released
clicked
clicked: false