QT之PushButton扮演的那几种角色
1、效果预览查看
2、信号槽关联,按键信号与槽函数触发
// 按键点击信号与槽连接
connect(ui.btnApply, SIGNAL(clicked()), this, SLOT(slotApplyClick()));
按键点击信号clicked()与自定义槽函数slotApplyClick()连接,实现按键按下,获取输入编辑框,并且以消息对话框显示出来。
// 定义应用槽函数
void QPushButtonDemo::slotApplyClick()
{
// 获取输入框的值
QString strInput = ui.lineEditInput->text();
// 消息框弹出输入值
QMessageBox::information(this, QString::fromLocal8Bit("提示"), strInput, QMessageBox::Yes);
}
3、 按键按下和弹起分别做不同的事情
构造对象的时候,需要先给按键注册事件。
// 注册事件
ui.btnApply->installEventFilter(this);
重写 事件过滤,并且捕捉事件对象btnApply,并且获取鼠标按键和松开的事件类型,进而分情况进行处理。
// 这里接受事件
bool QPushButtonDemo::eventFilter(QObject *target, QEvent *event)
{
if (target == ui.btnApply)
{
// 按键按下
if (event->type() == QEvent::MouseButtonPress)
{
ui.labelState->setText(QString::fromLocal8Bit("按键按下"));
}
// 按键弹起
else if (event->type() == QEvent::MouseButtonRelease)
{
ui.labelState->setText(QString::fromLocal8Bit("按键弹起"));
}
}
return QWidget::eventFilter(target, event);
}
4、 加载qss样式,让按键看起来更加的美
通过设置qss样式,让按键使用起来更加好看。
// 设置qss样式,这样控件变得好看些
void QPushButtonDemo::initFormQss()
{
QString strBtn = "QPushButton{\
border: 2px solid #333333;\
padding: 4px;\
min-width: 100px;\
min-height: 35px;\
border-radius:4px;\
color:white;\
background-color:#333333;\
}";
QString strBtnHover = "QPushButton:hover{\
background-color: #333333;\
border: 2px solid #F76900;\
}";
QString strBtnPressed = "QPushButton:pressed{\
border-radius:4px;\
border:4px solid #F76900;\
}";
ui.btnApply->setStyleSheet(strBtn+strBtnHover+strBtnPressed);
}
5、 程序关键代码头文件和源文件
全部代码下载链接: https://download.csdn.net/download/u013083044/14956337
// 头文件
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QPushButtonDemo.h"
class QPushButtonDemo : public QMainWindow
{
Q_OBJECT
public:
QPushButtonDemo(QWidget *parent = Q_NULLPTR);
private slots:
void slotApplyClick();
protected:
bool eventFilter(QObject *target, QEvent *event);
private:
void initFormQss();
private:
Ui::QPushButtonDemoClass ui;
};
// 源文件
#include "QPushButtonDemo.h"
#include <QMessageBox>
QPushButtonDemo::QPushButtonDemo(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
this->setWindowTitle(QString::fromLocal8Bit("QPushButton使用实例"));
// 按键点击信号与槽连接
connect(ui.btnApply, SIGNAL(clicked()), this, SLOT(slotApplyClick()));
// 注册事件
ui.btnApply->installEventFilter(this);
// 初始按键样式
initFormQss();
}
// 定义应用槽函数
void QPushButtonDemo::slotApplyClick()
{
// 获取输入框的值
QString strInput = ui.lineEditInput->text();
// 消息框弹出输入值
QMessageBox::information(this, QString::fromLocal8Bit("提示"), strInput, QMessageBox::Yes);
}
// 这里接受事件
bool QPushButtonDemo::eventFilter(QObject *target, QEvent *event)
{
if (target == ui.btnApply)
{
// 按键按下
if (event->type() == QEvent::MouseButtonPress)
{
ui.labelState->setText(QString::fromLocal8Bit("按键按下"));
}
// 按键弹起
else if (event->type() == QEvent::MouseButtonRelease)
{
ui.labelState->setText(QString::fromLocal8Bit("按键弹起"));
}
}
return QWidget::eventFilter(target, event);
}
// 设置qss样式,这样控件变得好看些
void QPushButtonDemo::initFormQss()
{
QString strBtn = "QPushButton{\
border: 2px solid #333333;\
padding: 4px;\
min-width: 100px;\
min-height: 35px;\
border-radius:4px;\
color:white;\
background-color:#333333;\
}";
QString strBtnHover = "QPushButton:hover{\
background-color: #333333;\
border: 2px solid #F76900;\
}";
QString strBtnPressed = "QPushButton:pressed{\
border-radius:4px;\
border:4px solid #F76900;\
}";
ui.btnApply->setStyleSheet(strBtn+strBtnHover+strBtnPressed);
}