文章目录

  • 1 客户端界面实现及登录功能实现
    • 1.1 界面设计
    • 1.2 界面实现及实现登录对话框的功能

1 客户端界面实现及登录功能实现

1.1 界面设计

界面设计:

界面实现方案:

  • 使用不同Layout对组件进行嵌套布局。

1.2 界面实现及实现登录对话框的功能

代码如下:
QLoginDialog.h:

#ifndef _QLOGINDIALOG_H_
#define _QLOGINDIALOG_H_#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTimer>class QLoginDialog : public QDialog
{Q_OBJECT
private:QLabel UserLabel;QLabel PwdLabel;QLabel CaptLabel;QLineEdit UserEdit;QLineEdit PwdEdit;QLineEdit CaptEdit;QPushButton LoginBtn;QPushButton CancelBtn;QString m_user;QString m_pwd;QString m_captcha;Qt::GlobalColor* m_colors;QTimer m_timer;
private slots:void LoginBtn_Clicked();void CancelBtn_Clicked();void Timer_Timeout();
protected:void paintEvent(QPaintEvent *);QString getCaptcha();Qt::GlobalColor* getColors();void showEvent(QShowEvent *);
public:QLoginDialog(QWidget *parent = 0);QString getUser();QString getPwd();~QLoginDialog();
};#endif

QLoginDialog.cpp:

#include "QLoginDialog.h"
#include <QPainter>
#include <QTime>
#include <QMessageBox>QLoginDialog::QLoginDialog(QWidget* parent) : QDialog(parent, Qt::WindowCloseButtonHint),UserLabel(this), PwdLabel(this), CaptLabel(this),UserEdit(this), PwdEdit(this), CaptEdit(this),LoginBtn(this), CancelBtn(this)
{UserLabel.setText("用户名:");UserLabel.move(20, 30);UserLabel.resize(60, 25);UserEdit.move(85, 30);UserEdit.resize(180, 25);PwdLabel.setText("密  码:");PwdLabel.move(20, 65);PwdLabel.resize(60,25);PwdEdit.move(85, 65);PwdEdit.resize(180, 25);PwdEdit.setEchoMode(QLineEdit::Password);CaptLabel.setText("验证码:");CaptLabel.move(20, 100);CaptLabel.resize(60, 25);CaptEdit.move(85, 100);CaptEdit.resize(85, 25);CancelBtn.setText("取消");CancelBtn.move(85, 145);CancelBtn.resize(85, 30);LoginBtn.setText("登录");LoginBtn.move(180, 145);LoginBtn.resize(85, 30);m_timer.setParent(this);setWindowTitle("登录...");setFixedSize(285, 205);connect(&m_timer, SIGNAL(timeout()), this, SLOT(Timer_Timeout()));connect(&LoginBtn, SIGNAL(clicked()), this, SLOT(LoginBtn_Clicked()));connect(&CancelBtn, SIGNAL(clicked()), this, SLOT(CancelBtn_Clicked()));qsrand(QTime::currentTime().second() * 1000 + QTime::currentTime().msec());m_timer.start(100);
}void QLoginDialog::LoginBtn_Clicked()
{QString captcha = CaptEdit.text().replace(" ", "");if( m_captcha.toLower() == captcha.toLower() ){m_user = UserEdit.text().trimmed();m_pwd = PwdEdit.text();if( m_user == "" ){QMessageBox::information(this, "消息", "用户名不能为空!");}else if( m_pwd == "" ){QMessageBox::information(this, "消息", "密码不能为空!");}else{done(Accepted);}}else{QMessageBox::critical(this, "错误", "验证码输入错误!");m_captcha = getCaptcha();CaptEdit.selectAll();}
}void QLoginDialog::CancelBtn_Clicked()
{done(Rejected);
}QString QLoginDialog::getUser()
{return m_user;
}QString QLoginDialog::getPwd()
{return m_pwd;
}void QLoginDialog::Timer_Timeout()
{m_colors = getColors();update();
}void QLoginDialog::showEvent(QShowEvent* event)
{m_captcha = getCaptcha();m_colors = getColors();QDialog::showEvent(event);
}void QLoginDialog::paintEvent(QPaintEvent* event)
{QPainter painter(this);painter.fillRect(180, 100, 84, 24, Qt::white);painter.setFont(QFont("Comic Sans MS", 12));for(int i=0; i<150; i++){painter.setPen(m_colors[i%4]);painter.drawPoint(180 + qrand() % 84, 100 + qrand() % 24);}for(int i=0; i<4; i++){painter.setPen(m_colors[i]);painter.drawText(180 + 20 * i, 100, 20, 24, Qt::AlignCenter, QString(m_captcha[i]));}QDialog::paintEvent(event);
}QString QLoginDialog::getCaptcha()
{QString ret = "";for(int i=0; i<4; i++){int c = (qrand() % 2) ? 'a' : 'A';ret += static_cast<QChar>(c + qrand() % 26);}return ret;
}Qt::GlobalColor* QLoginDialog::getColors()
{static Qt::GlobalColor colors[4];for(int i=0; i<4; i++){colors[i] = static_cast<Qt::GlobalColor>(2 + qrand() % 16);}return colors;
}QLoginDialog::~QLoginDialog()
{}

MainWin.h:

#ifndef MAINWIN_H
#define MAINWIN_H#include <QWidget>
#include <QVBoxLayout>
#include <QGroupBox>
#include <QPlainTextEdit>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>
#include "QLoginDialog.h"class MainWin : public QWidget
{Q_OBJECTQVBoxLayout vMainLayout;QGroupBox msgGrpBx;QGroupBox inputGrpBx;QPlainTextEdit msgEditor;QLineEdit inputEdit;QPushButton logInOutBtn;QPushButton sendBtn;QLabel statusLbl;QLoginDialog loginDlg;void initMsgGrpBx();void initInputGrpBx();void connectSlots();
private slots:void sendBtnClicked();void logInOutBtnClicked();
public:MainWin(QWidget *parent = 0);~MainWin();
};#endif // MAINWIN_H

MainWinUI.cpp:

#include "MainWin.h"
#include <QHBoxLayout>
#include <QGridLayout>MainWin::MainWin(QWidget *parent): QWidget(parent), loginDlg(this)
{initMsgGrpBx();initInputGrpBx();connectSlots();vMainLayout.setSpacing(10);vMainLayout.addWidget(&msgGrpBx);vMainLayout.addWidget(&inputGrpBx);setWindowTitle("狄泰聊天室");setLayout(&vMainLayout);setMinimumSize(550, 400);resize(550, 400);
}void MainWin::connectSlots()
{connect(&sendBtn, SIGNAL(clicked(bool)), this, SLOT(sendBtnClicked()));connect(&logInOutBtn, SIGNAL(clicked(bool)), this, SLOT(logInOutBtnClicked()));
}void MainWin::initMsgGrpBx()
{QHBoxLayout* hbl = new QHBoxLayout();hbl->setContentsMargins(2, 5, 2, 2);hbl->addWidget(&msgEditor);msgEditor.setReadOnly(true);msgGrpBx.setLayout(hbl);msgGrpBx.setTitle("聊天消息");
}void MainWin::initInputGrpBx()
{QGridLayout* gl = new QGridLayout();gl->setSpacing(10);gl->addWidget(&inputEdit, 0, 0, 1, 5);gl->addWidget(&statusLbl, 1, 0, 1, 3);gl->addWidget(&logInOutBtn, 1, 3);gl->addWidget(&sendBtn, 1, 4);inputEdit.setFixedHeight(23);inputEdit.setEnabled(false);statusLbl.setText("状态: 未登录");logInOutBtn.setFixedHeight(30);logInOutBtn.setText("登录");sendBtn.setFixedHeight(30);sendBtn.setText("发送");sendBtn.setEnabled(false);inputGrpBx.setFixedHeight(100);inputGrpBx.setLayout(gl);inputGrpBx.setTitle("用户名");
}MainWin::~MainWin()
{}

MainWinSlot.cpp:

#include "MainWin.h"void MainWin::sendBtnClicked()
{}void MainWin::logInOutBtnClicked()
{if( loginDlg.exec() == QDialog::Accepted ){}
}

main.cpp:

#include "MainWin.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWin w;w.show();return a.exec();
}

参考资料:

  1. QT实验分析教程

客户端界面实现及登录功能实现相关推荐

  1. html登录界面_php实现登录功能

    原文:https://blog.csdn.net/ccy1995414/article/details/80638685 自然是从最简单的功能起步,我第一个任务选择了做一个登录操作,其实也没想象中那么 ...

  2. androidstudio做登录界面_Vue-cli+Element-ui实现后台管理系统(二)实现后台登录功能...

    前言 接上文,本文主要讲解vue+element-ui后台管理系统的登录功能的实现,api接口这块如果对后端技术以及node的实现不太了解的情况下,可以写出假数据进行模拟操作~ 一.创建登录文件并配置 ...

  3. vue rule鼠标移走校验_Vue-cli+Element-ui实现后台管理系统(二)实现后台登录功能...

    前言 接上文,本文主要讲解vue+element-ui后台管理系统的登录功能的实现,api接口这块如果对后端技术以及node的实现不太了解的情况下,可以写出假数据进行模拟操作~ 一.创建登录文件并配置 ...

  4. ios mysql注册登录界面_iOS+PHP实现登录功能

    近期在做app开发的时候,因为要用到app登录功能,就自己写了个简单的iOS+PHP实现登录功能的demo,经过运行能够通过登录测试. 在开发过程中,也是碰到了各种各样的问题,经过不断的调试和改变方法 ...

  5. 喧喧发布 2.5.4 版本,新增客户端界面缩放等功能

    百度智能云 云生态狂欢季 热门云产品1折起>>>   喧喧是由然之协同团队推出的一款轻量级的开源企业聊天软件.提供企业内部通讯交流.企业通讯录.协同办公通讯交流.企业IM解决方案. ...

  6. php静态登录界面代码,JSP_JSP登录验证功能的实现,静态的登录界面的设计login.htm - phpStudy...

    JSP登录验证功能的实现 静态的登录界面的设计login.htm,代码如下: 系统登录 系 统 登 录 用户名            密  码        将登录用户输入的信息提交到login.js ...

  7. 灵悟礼品网上专卖店——客户端的登录功能开发

    一.小组成员: 洪雪意(产品负责人) 陈淑筠(Master) 二.组内人员任务情况 计划完成的第二个任务:客户端的登录功能 已完成的任务: 陈淑筠(任务2):客户端的登录功能 正在进行的任务: 洪雪意 ...

  8. 基于pyqt5的登录界面及人脸识别功能界面相互跳转的设计(1)

    基于pyqt5的登录界面及人脸识别功能界面相互跳转的设计(1) 这个是登录界面: 部分代码如下: // An highlighted block from 文件1 import * from PyQt ...

  9. c# mysql登录界面_C#窗体控件与MySQL实现登录功能

    C#窗体控件与MySQL实现登录功能 1.windows窗体 控件 1  label1 2  label2 3  textBox1 4  textBox2 5  button1 6  button2 ...

最新文章

  1. abap 常用系统变量
  2. oracle+字段+virtual,Oracle 11g新特性之--虚拟列(Virtual Column)
  3. oracle安装及使用常见错误
  4. Hashtable源码注释
  5. Spark Operator资料收集
  6. (转) xcodebuild和xcrun自动化编译ipa包 笔记
  7. ngrx里StoreModule.forFeature(‘example‘, reducers)运行时的数据结构
  8. 液压支架销轴力学计算分析研究_基于RFID射频精准定位的智能开采研究与应用...
  9. tensorflow 学习笔记
  10. Python 实现单例模式
  11. rollup打包js的注意点-haorooms博客分享
  12. linux kernel directory
  13. jvm的内存回收机制
  14. 生成BMP格式图片备忘
  15. 为electron添加Chrome扩展程序
  16. ASP.Net免费发送短信
  17. 如何用计算机名称获取计算机ip
  18. labview图形显示正弦曲线信号发生器频率幅值相位数字示波器滤波器频谱分析
  19. MySQL_启动_Windows
  20. 1w存银行一年多少利息_500万、1000万存银行一年有多少钱利息?能靠利息生活吗?...

热门文章

  1. 【控制】《多智能体机器人系统信息融合与协调》范波老师-第3章-多 Agent 协调的学习与对策
  2. P7 频域分析法-《Matlab/Simulink与控制系统仿真》程序指令总结
  3. 2.4 嵌入矩阵-深度学习第五课《序列模型》-Stanford吴恩达教授
  4. STM32 基础系列教程 33 - Lwip_tcp_client
  5. 【Android工具】高端DLNA音乐播放器Hi-Fi Cast 来自play
  6. 头插法和尾插法分别建立链表(复制即可应用)
  7. linux下利用shell脚本和mysqldump热备份和恢复mysql
  8. chrome 插件开发心得
  9. dovecot vsz_limit参造成foxmail、outlook等客户端工具接收邮件有时候报错
  10. Mongodb 定时备份和恢复