Qt学习之路之自定义消息框

Qt自己也有很多的消息框,这时,如果这些消息框都不能满足开发的需求, Qt还允许自定义消息框。

包括消息框的图标, 按钮和消息框显示的内容都可以根据需求设定。不废话了,下面给出个简单的例子~~~

custmsg_widget.h

#ifndef CUSTMSGWIDGET_H
#define CUSTMSGWIDGET_H
#include <QDialog>
#include <QPushButton>
#include <QLabel>
#include <QTextCodec>		//---用于解决QT5下中文乱
#include <QMessageBox>
#include <QGridLayout>
#include <QPixmap>
#include <QFrame>

class CusMsgWidget : public QDialog
{
	Q_OBJECT
public :
	explicit CusMsgWidget(QWidget *parent = 0);

	public slots:
		void slotShowCustomDlg();

private:
	QPushButton *CustomBtn;
	QLabel *label;
	QGridLayout *mainLayout;		//---网格布局
};
#endif	//CUSTMSGWIDGET_H

custmsg_widget.cpp

#include "custmsg_widget.h"

CusMsgWidget::CusMsgWidget(QWidget *parent /*= 0*/):QDialog(parent)
{
	//---窗口大小
	resize(200, 100);

	//-----------------------解决中文乱码
	QTextCodec *codec = QTextCodec::codecForName("GB18030");

	//----按钮 与 label 控件
	CustomBtn = new QPushButton(this);
	CustomBtn->setText(codec->toUnicode("点击我试试"));

	label = new QLabel(this);
	label->setFrameStyle(QFrame :: Panel | QFrame :: Sunken);

	//-----控件布局
	mainLayout = new QGridLayout(this);
	mainLayout->addWidget(CustomBtn, 0, 0);
	mainLayout->addWidget(label, 1, 0);

	//---设置事件关联代码
	connect(CustomBtn, SIGNAL(clicked()), this, SLOT(slotShowCustomDlg()));
}


//------------槽函数
void CusMsgWidget::slotShowCustomDlg()
{
	//-----------------------解决中文乱码
	QTextCodec *codec = QTextCodec::codecForName("GB18030");

	//--- label 显示内容
	QString labelStr = codec->toUnicode("自定义消息框");
	label->setText(labelStr);
	label->setText(codec->toUnicode("自定义消息框"));

	//-QMessageBox 设置标题
	QMessageBox customMsg;
	customMsg.setWindowTitle(codec->toUnicode("自定义消息框"));

	//----设定3个常规按钮
	QPushButton *yesBtn = customMsg.addButton(codec->toUnicode("是"), QMessageBox::ActionRole);
	QPushButton *noBtn = customMsg.addButton(codec->toUnicode("否"), QMessageBox::ActionRole);
	QPushButton *cancelBtn = customMsg.addButton(QMessageBox::Cancel);

	//---
	customMsg.setText(codec->toUnicode("这是一个用户自定义的消息框"));
	customMsg.setIconPixmap(QPixmap(":/1"));
	customMsg.exec();
	
	//-----点击消息框按钮事件处理
	//--是
	if (customMsg.clickedButton() == yesBtn)
	{
		label->setText(codec->toUnicode("点击了自定义消息框的“是”按钮"));
	}
	//---否
	if (customMsg.clickedButton() == noBtn)
	{
		label->setText(codec->toUnicode("点击了自定义消息框的“否”按钮"));
	}
	//---取消
	if (customMsg.clickedButton() == cancelBtn)
	{
		label->setText(codec->toUnicode("点击了自定义消息框的“取消”按钮"));
	}

	return;
}


下面是运行结果

           

                      

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PandaMohist

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值