QT笔记——QPushButton记录

1.QPushButton 我们想处理保持按下 和 处于松开状态下的两种
在这里插入图片描述
保持按下:
在这里插入图片描述

和再点击一次的效果:
在这里插入图片描述

setCheckable()是否保持按下状态
isCheckable() 获取是否被设置为 true 或者 false
setChecked() 设置是否被选择
isChecked() 只有按钮被 setCheckable(true)时 ,以后才能获取到true,要不为false
代码:

void WidgetThree::on_btn5_clicked()
{
	//当被选中时
	if (ui.btn5->isChecked() == true)
	{
		QMessageBox::information(nullptr, "123", "5555");
	}
	else
	{
		QMessageBox::information(nullptr, "123", "1111-1155555");
	}
	
	//当保持按下状态时
	if (ui.btn5->isCheckable() == true)
	{
		QMessageBox::information(nullptr, "123", "222222");
	}
	else
	{
		QMessageBox::information(nullptr, "123", "222-33333");
	}
	
	//发现这个是没有效果的  不管怎么样都是false 状态
	if (ui.btn5->isDown() == true)
	{
		QMessageBox::information(nullptr, "123", "down");
	}
	else
	{
		QMessageBox::information(nullptr, "123", "no dwon");
	}

}

2.我们想测试一下 获取按下状态 isDown()

isDown() 表示按钮button是否 是pressed信号下 (其他信号按下的没用 如 clicked()信号下) down按下的
setDown() 设置按下状态
pressed()信号,当鼠标在button上并点击左键的时候发射(鼠标 不松开 ,如果鼠标松开 会触发clicked信号)

在这里插入图片描述

代码:

void WidgetThree::on_btn_pressed()
{
	if (ui.btn->isDown() == true)
	{
		QMessageBox::information(nullptr, "123", "down");
	}
	else
	{
		QMessageBox::information(nullptr, "123", "no dwon");
	}

}

3.我们设置一组按钮互斥

setAutoExclusive() 设置是否互斥 ,必须大于两个按钮

在这里插入图片描述

效果:
在这里插入图片描述
4个按钮,必须有一个为被选中且高亮,样式表如下:

QPushButton{ 
 border:1 solid gray;
 background-color: rgb(229, 229, 229);
}

QPushButton:hover{
 border:1 solid #00aaff;
 background-color:  #dcfdfc;

}

QPushButton:checked,
QPushButton:pressed{
 border:1 solid #0b95ff;
 background-color:#bcebff;
}

4.我们想要设置一组按钮 最多一个按钮(0 或者 1)能被选中 而且,这几个功能都互斥, 在被点击的和不被点击时 执行不同的功能

这是我们使用AutoExclusive() 就是不可以的 ,因为必须有一个按钮为被选中 ,但是我们想的是 0 或者 1个按钮 被选中 而且 这所有的按钮互斥,我们需要将AutoExclusive(false)

void WidgetThree::setBtnDownStatus(QPushButton* btn, QObject* obj)
{
	if (nullptr == obj)
		return;

	QList<QPushButton*> listButtons = obj->findChildren<QPushButton*>();
	for (auto& curBtn : listButtons)
	{

		if (btn == nullptr)
			curBtn->setChecked(false);
		else  //当前按钮 
		{
			if (curBtn->objectName() == btn->objectName())
				curBtn->setChecked(true);		
			else
				curBtn->setChecked(false);
		}
	}
}

void WidgetThree::on_btn1_clicked()
{
	if (ui.btn1->isChecked())
	{
		//执行某个功能
		QMessageBox::information(nullptr, "123", "111  true");
		setBtnDownStatus(ui.btn1, ui.widget);
	}
	else
	{
		QMessageBox::information(nullptr, "123", "111  false");
	}	
}

void WidgetThree::on_btn2_clicked()
{
	if (ui.btn2->isChecked())
	{
		//执行某个功能
		QMessageBox::information(nullptr, "123", "222  true");
		setBtnDownStatus(ui.btn2, ui.widget);
	}
	else
	{
		QMessageBox::information(nullptr, "123", "222  false");
	}
}

void WidgetThree::on_btn3_clicked()
{
	if (ui.btn3->isChecked())
	{
		//执行某个功能
		QMessageBox::information(nullptr, "123", "333  true");
		setBtnDownStatus(ui.btn3, ui.widget);
	}
	else
	{
		QMessageBox::information(nullptr, "123", "333  false");
	}
}

void WidgetThree::on_btn4_clicked()
{
	if (ui.btn4->isChecked())
	{
	   //执行某个功能
		QMessageBox::information(nullptr, "123", "444  true");
		setBtnDownStatus(ui.btn4, ui.widget);
	}
	else
	{
		QMessageBox::information(nullptr, "123", "444  false");
	}
}

效果图:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值