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);
}

猜你喜欢

转载自blog.csdn.net/u013083044/article/details/113407235