Qt4学习笔记(二),QDialog学习之登录框实现

LoginDlg.h:

#ifndef LOGINDLG_H_
#define LOGINDLG_H_

#include <QDialog>

class QLineEdit;

class LoginDlg : public QDialog
{
	Q_OBJECT

public:
	LoginDlg(QWidget *parent = 0);
	~LoginDlg();

private slots:
	virtual void accept();

private:
	QLineEdit *m_pUserLineEdit;
	QLineEdit *m_pPwdLineEdit;
};

#endif // LOGINDLG_H_

LoginDlg.cpp:

#include "LoginDlg.h"
#include <QLabel>
#include <QLineEdit>
#include "GBK.h"
#include <QGridLayout>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QMessageBox>

LoginDlg::LoginDlg(QWidget *parent)
	: QDialog(parent)
{
	QLabel *pUserLabel = new QLabel(GBK::ToUnicode("用户名:"));
	QLabel *pPwdLabel = new QLabel(GBK::ToUnicode("密  码:"));
	m_pUserLineEdit = new QLineEdit;
	m_pPwdLineEdit = new QLineEdit;
	//设置输入框回显样式
	m_pPwdLineEdit->setEchoMode(QLineEdit::Password);
	//创建网格布局管理器
	QGridLayout *pGridLayout = new QGridLayout;
	//(0, 0, 1, 1) => (行, 列, 行跨度, 列跨度)
	pGridLayout->addWidget(pUserLabel, 0, 0, 1, 1);
	pGridLayout->addWidget(m_pUserLineEdit, 0, 1, 1, 3);
	pGridLayout->addWidget(pPwdLabel, 1, 0, 1, 1);
	pGridLayout->addWidget(m_pPwdLineEdit, 1, 1, 1, 3);

	QPushButton *pOkBtn = new QPushButton(GBK::ToUnicode("确定"));
	QPushButton *pCancelBtn = new QPushButton(GBK::ToUnicode("取消"));
	//水平布局
	QHBoxLayout *pBtnLayout = new QHBoxLayout;
	//设置确定和取消两个按钮之间的间隔为60
	pBtnLayout->setSpacing(60);
	pBtnLayout->addWidget(pOkBtn);
	pBtnLayout->addWidget(pCancelBtn);

	//垂直布局管理器
	QVBoxLayout *pDlgLayout = new QVBoxLayout;
	//设置pDlgLayout的边框宽度为40,即pDlgLayout内部子窗口到pDlgLayout边框的距离为40
	pDlgLayout->setMargin(40);
	pDlgLayout->addLayout(pGridLayout);
	//pGridLayout到pBtnLayout之间的距离为40
	pDlgLayout->addStretch(40);
	pDlgLayout->addLayout(pBtnLayout);
	setLayout(pDlgLayout);

	connect(pOkBtn, SIGNAL(clicked()), this, SLOT(accept()));
	connect(pCancelBtn, SIGNAL(clicked()), this, SLOT(reject()));

	setWindowTitle(GBK::ToUnicode("登录"));
	resize(300,200);
}

LoginDlg::~LoginDlg()
{

}

void LoginDlg::accept()
{
	if (m_pUserLineEdit->text() == "123" && m_pPwdLineEdit->text() == "123")
	{
		QDialog::accept();
	}
	else
	{
		QMessageBox::warning(this, GBK::ToUnicode("警告"),
			                 GBK::ToUnicode("用户名或密码错误!"), QMessageBox::Yes);
		m_pUserLineEdit->setFocus();
	}
}

main.cpp:

#include <QtGui/QApplication>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout> //垂直布局
#include "LoginDlg.h"

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	LoginDlg loginDlg;
	if (loginDlg.exec() == QDialog::Accepted)
	{
		QWidget *pWidget = new QWidget();
		pWidget->show();
	}
	else
	{
		return 0;
	}	
	
	return a.exec();
}

运行结果:


备注:






  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QDialog 可以用来实现登录对话。下面是一个简单的实现过程: 1. 创建一个 QDialog 类的子类 LoginDialog,用于显示登录对话。 2. 在 LoginDialog 类中添加需要的控件,例如 QLabel、QLineEdit 和 QPushButton。 3. 在 LoginDialog 类中添加一个槽函数,用于响应登录按钮的点击事件。 4. 在槽函数中获取用户名和密码的输入,并进行验证。 5. 如果验证通过,调用 QDialog 类的 accept() 函数,关闭对话并返回 QDialog::Accepted。 6. 如果验证不通过,弹出一个 QMessageBox 提示用户输入错误,并保持对话打开。 下面是一个简单的示例代码: ```cpp class LoginDialog : public QDialog { Q_OBJECT public: LoginDialog(QWidget *parent = nullptr) : QDialog(parent) { QLabel *userLabel = new QLabel(tr("Username:")); QLineEdit *userEdit = new QLineEdit; QLabel *passLabel = new QLabel(tr("Password:")); QLineEdit *passEdit = new QLineEdit; passEdit->setEchoMode(QLineEdit::Password); QPushButton *loginButton = new QPushButton(tr("Login")); connect(loginButton, &QPushButton::clicked, this, &LoginDialog::login); QGridLayout *layout = new QGridLayout; layout->addWidget(userLabel, 0, 0); layout->addWidget(userEdit, 0, 1); layout->addWidget(passLabel, 1, 0); layout->addWidget(passEdit, 1, 1); layout->addWidget(loginButton, 2, 0, 1, 2); setLayout(layout); } signals: void loggedIn(const QString &username); private slots: void login() { QString username = userEdit->text(); QString password = passEdit->text(); // 进行验证 if (username == "admin" && password == "123456") { emit loggedIn(username); accept(); } else { QMessageBox::warning(this, tr("Login Failed"), tr("Invalid username or password.")); } } private: QLineEdit *userEdit; QLineEdit *passEdit; }; ``` 在主窗口中,可以使用以下代码来显示登录对话: ```cpp LoginDialog dialog; connect(&dialog, &LoginDialog::loggedIn, this, &MainWindow::onLoggedIn); if (dialog.exec() == QDialog::Accepted) { // 登录成功 } ``` 其中,onLoggedIn() 是主窗口中的一个槽函数,用于处理登录成功的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值