精华内容
下载资源
问答
  • C++登陆界面

    热门讨论 2012-06-19 17:08:28
    简单的登陆界面,挺好用的
  • VS2010 C++ MFC 登陆界面设计

    热门讨论 2015-01-21 09:42:45
    VS2010 C++ MFC 在主程序显示前显示登陆界面,初始账户密码均为zc。使用access数据库,密码可在其中修改。
  • c++ builder 登陆界面 问题 及 解决 分析过程 问答 c++builder各种资料
  • C++编写的登陆界面

    热门讨论 2011-04-29 23:12:57
    在老师讲过之后,自己编写的一个简单的登陆界面 利用C++设置的简单登陆界面
  • 类似QQ登陆界面,用户名USER,密码password。有源码,直接可用!! 类似QQ登陆界面,用户名USER,密码password。有源码,直接可用!!
  • c/c++语言实现登陆界面

    千次阅读 多人点赞 2020-08-28 22:17:43
    C/C++语言简单实现登陆界面 整体功能介绍 /*********************************************************** 实现一个登陆界面 1 输出一个登陆界面 2 用户名能够实现邮箱验证,regex库,密码要不可见 3 进度条的模拟...

    C/C++语言实现登陆界面

    整体功能介绍

    /***********************************************************
    实现一个登陆界面
    1 输出一个登陆界面
    2 用户名能够实现邮箱验证,regex库,密码要不可见
    3 进度条的模拟实现
    4 音乐播放
    ***************************************************************/

    分步实现

    1.输出一个登陆界面

    首先对此功能使用到的函数进行简单的介绍。

    (1).system();

    int system(const char *command) 把 command 指定的命令名称或程序名称传给要被命令处理器执行的主机环境,并在命令完成后返回。使用此函数需要包含头文件:#include <stdlib.h>


    *<1>调整窗口

    •      system函数+dos指令
      
    •      标题:title 标题名
      
    •      颜色:color f0
      
    •      大小:mode con cols = 40 lins =8;//此处可自己定义cols和lins大小
      
    •            例如:
      
    •               system("calc");打开计算器“”里面是计算机的命令。
      
    •               system("pause");//防止闪屏 
      

    实现

    void setWindosStyle(void)
    {
    	system("title 邮箱验证");
    	system("color f0");
    	system("mode con cols=40 lines=8");
    }
    

    2.用户及密码

    此处要实现密码不可见,故使用到了_getch()函数,可自行百度。

    void setUserNamPass(uin8_t* username, uin8_t* userpassword)
    {
    	cout << "\t用户名:";
    	cin >> username;
    	cout << "\t密  码:";
    	//cin >> userpassword;
    // 密码不可见:字符串当做字符处理
    // 每次按键输出一个*号就可以,然后把所有按键保存到password里面
    	char key;
    	uin32_t i = 0;
    	while ((key = _getch()) != '\r')
    	{
    		if (i < 6)
    		{
    			userpassword[i++] = key;
    			putchar('*');
    		}
    		else
    		{
    			cout << "密码过长" << endl;
    			system("pause");
    			return;
    		}
    	}
    	//字符串结束标记:\0;
    	userpassword[i] = '\0';
    }
    

    3.邮箱验证

    此功能是用来判断输入需要构造正则表达式对象,然后调用regex_match()函数来判断输入字符串是否满足要求;使用到C++头文件#include 。

    bool checkEmail(uin8_t* username)
    {
    	bool result = false;
    	//ctb   @163 .com.cn
    	regex object("(\\w+)@(\\w+)(\\.(\\w+))+");
    	/*1. 字母a-z A-Z 或者下划线或者0-9,正则表达式*/
    	//+ 多个
    	result = regex_match(username, object);
    	return result;
    }
    

    4. 进度条的模拟实现

    此功能使用到了#include <Windows.h>头文件的Sleep()函数。

    void proc(void)
    {
    	string str("-");
    	for (uin32_t i = 0; i <= 20; i++)
    	{
    		system("cls");
    		cout << str << endl;
    		cout << i * 5 << "%" << endl;
    		str += "-";
    		Sleep(500);
    	}
    	printf("sucess....!\n");
    }
    

    5 .播放音乐

    此功能使用到 #include(mmsystem.h)头文件里的mciSendString()函数,可百度了解此函数功能。
    首先下载一个音乐MPS文件,然后将其拷贝到此过程工程目录下。注意:实现此功能需加载静态包,

    • #pragma comment(lib,“winmm.lib”)//加载静态包
    void palyMusic(void)
    {
    	mciSendString("open 1.mp3 alias music", 0, 0, 0);
    	mciSendString("play music repeat", 0, 0, 0);
    }
    

    6.测试

    <1>.头文件
    //#pragma once
    #ifndef _TEST_H_
    #define _TEST_H_
    
    typedef int uin32_t;
    typedef char uin8_t;
    
    #include<iostream>
    #include <cstdio>//c++引用中标准,一般是c+原来的文件名字
    #include <conio.h>//_getch()
    #include <regex>//正则表达式
    #include <string>
    #include <Windows.h>
    #include <mmsystem.h>
    using namespace  std;
    
    void setWindosStyle();
    void setUserNamPass(uin8_t* username, uin8_t*userpassword);
    bool checkEmail(uin8_t* username);
    void proc(void);
    void palyMusic(void);
    
    #endif // !_TEST_H_
    
    
    <2>.main函数
    #include "test.h"
    
    uin32_t main(void)
    {
    	//用户名+密码
    	uin8_t username[20] = "";
    	uin8_t userpassword[7] = "";
    	
    	setWindosStyle();
    
    	setUserNamPass(username, 
    		userpassword);
    	
    	if ((checkEmail(username)) == true)
    	{
    		if (!(strcmp(username, "ctb@163.com.cn")&&strcmp(userpassword,"12345")))
    		{
    			//弹出进度条
    			proc();
    			cout << "music begin!!!" << endl;
    			//在播放音乐
    			palyMusic();
    		}
    		else
    		{
    			cout << "用户名或者密码错误" << endl;
    		}
    	}
    	else
    	{
    		printf("inpute email name no standard\n");
    	}
    
    	system("pause");
    	return 0;
    }
    
    展开全文
  • QML与C++交互:登陆界面设计

    万次阅读 多人点赞 2014-05-14 10:12:02
    QML与C++交互:登陆界面设计 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:Qt5.2.1 说明: QML设计前台界面,C++后台负责逻辑 效果图: 源代码...

    QML与C++交互:登陆界面设计


    本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.


    环境:

    主机:WIN7

    开发环境:Qt5.2.1


    说明:

    QML设计前台界面,C++后台负责逻辑


    效果图:




    源代码:


    前台qml文件

    login.qml

    /*********************************************************************
    *                            登陆界面qml文件
    *                       (c)copyright 2014,jdh
    *                         All Right Reserved
    *新建日期:2014/4/29 by jdh
    *修改日期:2014/4/30 by jdh
    *修改日期:2014/5/4 by jdh
    *修改日期:2014/5/5 by jdh
    **********************************************************************/
    
    import QtQuick 2.0
    import "content"
    import Login_Gui 1.0
    
    Rectangle
    {
        id: login
        width: 320; height: 512
        SystemPalette { id: activePalette }
    
        //C++组件:用户界面
        Login_Gui
        {
            id:login_gui
            onSig_login_result:
            {
                //关闭登陆动画
                load_gif.opacity = 0
    
                //根据登陆结果处理
                switch (result)
                {
                //登陆成功
                case 0:
                    message.text = "登陆成功"
                    message.opacity = 1
                    break;
                //无此用户名
                case 1:
                    message.text = "登陆失败:无此用户名"
                    message.opacity = 1
                    break;
                //密码错误
                case 2:
                    message.text = "登陆失败:密码错误"
                    message.opacity = 1
                    break;
                //达到最大登陆次数
                case 3:
                    message.text = "登陆失败:达到最大登陆次数"
                    message.opacity = 1
                    break;
                }
            }
        }
    
        //背景图片
        Image
        {
            id: background
            anchors { top: parent.top; bottom: parent.bottom }
            anchors.fill: parent
            source: "pics/pic1.png"
            fillMode: Image.PreserveAspectCrop
        }
    
        //消息框
        Message
        {
            id: message
            font_size: login.height * 0.03
            anchors {centerIn: parent}
            opacity: 0
        }
    
        //登陆动画
        AnimatedImage
        {
            id: load_gif; source: "pics/load.gif"
            anchors {horizontalCenter: parent.horizontalCenter; verticalCenter: parent.verticalCenter}
            z: 100
            opacity: 0
        }
    
        //顶栏
        Item
        {
            id: top_bar
            width: login.width; height: login.height * 0.06
            anchors.top: parent.top
    
            Text
            {
                id: title
                anchors { top: parent.top; horizontalCenter: parent.horizontalCenter }
                //text: "登陆"
                text: "登陆"
                font.bold: true
                font.pointSize: login.height * 0.06 * 0.4
                color: "dark red"
            }
        }
    
        //空白栏
        Item
        {
            id: space1
            width: login.width; height: login.height * 0.1
            anchors.top: top_bar.bottom
        }
    
        //登陆框
        Rectangle
        {
            id: rect1
            width: login.width * 0.8; height: login.height * 0.3
            anchors { top: space1.bottom; horizontalCenter: parent.horizontalCenter }
            border.color: "#707070"
            color: "transparent"
            radius: 8
    
            Row
            {
                spacing: rect1.width * 0.05
    
                Item
                {
                    width: rect1.width * 0.05; height: rect1.height
                }
    
                Column
                {
                    spacing: rect1.height * 0.025
    
                    Item
                    {
                        width: rect1.width * 0.8; height: rect1.height * 0.05
                    }
    
                    LineInput
                    {
                        id: txt_user_id
                        width: rect1.width * 0.8; height: rect1.height * 0.2
                        font_size:height * 0.7
                        //anchors {horizontalCenter: rect1.horizontalCenter; top: rect1.top; topMargin: 8}
                        hint: "请输入用户号"
                        text:login_gui.user_id
                    }
    
                    LineInput
                    {
                        id: txt_password
                        width: rect1.width * 0.8; height: rect1.height * 0.2
                        font_size:height * 0.7
                        //anchors {horizontalCenter: rect1.horizontalCenter; bottom: btn_login.top;  bottomMargin: rect1.height * 0.1}
                        hint: "请输入密码"
                        text:login_gui.password
                    }
    
                    Row
                    {
                        spacing: rect1.width * 0.1
                        Button
                        {
                            id: btn_login
                            width: rect1.width * 0.35; height: rect1.height * 0.2
                            //anchors { left: rect1.left; leftMargin: 28; bottom: rect1.bottom; bottomMargin: 8 }
                            text: "登陆"
                            onClicked: login_req()
                        }
    
                        Button
                        {
                            id: btn_quit
                            width: rect1.width * 0.35; height: rect1.height * 0.2
                            //anchors { right: rect1.right; rightMargin: 28; bottom: rect1.bottom; bottomMargin: 8 }
                            text: "退出"
                            onClicked:
                            {
                                Qt.quit();
                            }
                        }
                    }
    
                    Row
                    {
                        spacing: rect1.width * 0.1
    
                        CheckBox
                        {
                            id: check1
                            width: rect1.width * 0.35; height: rect1.height * 0.2
                            //anchors { left: rect1.left; top: rect1.bottom }
                            caption: "记住密码"
                            selected: login_gui.flag_remember
                        }
    
                        CheckBox
                        {
                            id: check2
                            width: rect1.width * 0.35; height: rect1.height * 0.2
                            //anchors { right: rect1.right; top: rect1.bottom }
                            caption: "自动登陆"
                            selected: login_gui.flag_auto
                        }
                    }
                }
            }
        }
    
        //android自带键处理
        FocusScope
        {
            focus: true
    
            Keys.onReleased:
            {
                if (event.key == Qt.Key_Back)
                {
                    console.log("qml login quit")
                    login.sig_btn_quit()
                }
            }
        }
    
        //登陆请求函数
        function login_req()
        {
            //判断用户名是否有效
            if (txt_user_id.text == "")
            {
                message.text = "请输入用户名"
                message.opacity = 1
                return
            }
    
            //判断密码是否有效
            if (txt_password.text == "")
            {
                message.text = "请输入密码"
                message.opacity = 1
                return
            }
    
            //显示登陆动画
            load_gif.opacity = 1
    
            //登陆请求
            login_gui.user_id = txt_user_id.text
            login_gui.password = txt_password.text
            login_gui.flag_remember = check1.selected
            login_gui.flag_auto = check2.selected
            login_gui.slot_login_req()
        }
    
    //    //信号槽绑定
    //    Component.onCompleted:
    //    {
    //        login_gui.sig_user_id_changed.connect(login_gui.slot_btn_login)
    //    }
    }
    

    后台C++代码

    main.c

    /*********************************************************************
    *                               主文件
    *                       (c)copyright 2014,jdh
    *                         All Right Reserved
    *新建日期:2014/1/27 by jdh
    *修改日期:2014/1/28 by jdh
    *修改日期:2014/2/4 by jdh
    *修改日期:2014/2/18 by jdh
    *修改日期:2014/2/27 by jdh
    *修改日期:2014/2/28 by jdh
    *修改日期:2014/3/1 by jdh
    *修改日期:2014/4/10 by jdh
    *修改日期:2014/5/4 by jdh
    **********************************************************************/
    
    #include "world.h"
    #include "main_gui.h"
    #include "login_gui.h"
    #include "light_gui.h"
    #include "heart_beat.h"
    #include "net.h"
    #include "data_sync_center.h"
    #include "set_ctrl_state.h"
    
    int main(int argc, char *argv[])
    {
        QGuiApplication app(argc, argv);
    
        //注册组件到QML
        qmlRegisterType<Login_Gui>("Login_Gui", 1, 0, "Login_Gui");
    
        QtQuick2ApplicationViewer viewer;
        viewer.setMainQmlFile(QStringLiteral("qml/SH_User/login.qml"));
        viewer.showExpanded();
    
        return app.exec();
    }
    

    login_gui.h

    /*********************************************************************
    *                           登陆界面模块头文件
    *                       (c)copyright 2014,jdh
    *                         All Right Reserved
    *新建日期:2014/1/29 by jdh
    *修改日期:2014/2/1 by jdh
    *修改日期:2014/2/18 by jdh
    *修改日期:2014/3/18 by jdh
    *修改日期:2014/5/4 by jdh
    *修改日期:2014/5/5 by jdh
    *修改日期:2014/5/13 by jdh
    **********************************************************************/
    
    #ifndef LOGIN_GUI_H
    #define LOGIN_GUI_H
    
    /*********************************************************************
    *                               头文件
    **********************************************************************/
    
    #include "world.h"
    
    /*********************************************************************
    *                               宏定义
    **********************************************************************/
    
    /*********************************************************************
    *                               登录间隔
    *单位:ms
    **********************************************************************/
    
    #define INTERVAL_LOGIN          500
    
    /*********************************************************************
    *                               最大登录次数
    **********************************************************************/
    
    #define NUM_LOGIN               5
    
    /*********************************************************************
    *                               数据结构
    **********************************************************************/
    
    /*********************************************************************
    *                               登录界面类
    **********************************************************************/
    
    class Login_Gui : public QObject
    {
        Q_OBJECT
    
        //属性:用户名
        Q_PROPERTY(QString user_id READ user_id WRITE set_user_id NOTIFY sig_user_id_changed)
        //属性:密码
        Q_PROPERTY(QString password READ password WRITE set_password NOTIFY sig_password_changed)
        //属性:记住密码标志
        Q_PROPERTY(bool flag_remember READ flag_remember \
                   WRITE set_flag_remember NOTIFY sig_flag_remember_changed)
        //属性:自动登录标志
        Q_PROPERTY(bool flag_auto READ flag_auto \
                   WRITE set_flag_auto NOTIFY sig_flag_auto_changed)
    
    public:
    
        /*********************************************************************
        *                           函数
        **********************************************************************/
    
        /*********************************************************************
        *                           初始化函数
        **********************************************************************/
    
        Login_Gui();
    
        /*********************************************************************
        *                           解构函数
        **********************************************************************/
    
        ~Login_Gui();
    
        /*********************************************************************
        *                           属性读取:用户号
        **********************************************************************/
    
        QString user_id();
    
        /*********************************************************************
        *                           属性写入:用户号
        **********************************************************************/
    
        void set_user_id(QString str);
    
        /*********************************************************************
        *                           属性读取:密码
        **********************************************************************/
    
        QString password();
    
        /*********************************************************************
        *                           属性写入:密码
        **********************************************************************/
    
        void set_password(QString str);
    
        /*********************************************************************
        *                           属性读取:记住密码标志
        **********************************************************************/
    
        bool flag_remember();
    
        /*********************************************************************
        *                           属性写入:记住密码标志
        **********************************************************************/
    
        void set_flag_remember(bool flag);
    
        /*********************************************************************
        *                           属性读取:自动登陆标志
        **********************************************************************/
    
        bool flag_auto();
    
        /*********************************************************************
        *                           属性写入:自动登陆标志
        **********************************************************************/
    
        void set_flag_auto(bool flag);
    
    signals:
    
        /*********************************************************************
        *                           属性改变信号:用户号
        **********************************************************************/
    
        void sig_user_id_changed();
    
        /*********************************************************************
        *                           属性改变信号:密码
        **********************************************************************/
    
        void sig_password_changed();
    
        /*********************************************************************
        *                           属性改变信号:记住密码标志
        **********************************************************************/
    
        void sig_flag_remember_changed();
    
        /*********************************************************************
        *                           属性改变信号:自动登陆标志
        **********************************************************************/
    
        void sig_flag_auto_changed();
    
        /*********************************************************************
        *                           信号:登陆结果
        *参数:result:0:成功
        *           1:无此用户名
        *           2:密码错误
        *           3:达到登陆的最大次数
        **********************************************************************/
    
        void sig_login_result(int result);
    
        /*********************************************************************
        *                               发送网络帧
        *参数:id:用户名
        *    password:密码
        *    cmd:帧命令
        *    index:发送序列号
        *    frame:发送的报文
        **********************************************************************/
    
        void sig_net_tx_frame_with_id(uint32_t id,uint32_t password,int cmd,uint16_t index,QByteArray frame);
    
    public slots:
    
        /*********************************************************************
        *                           槽函数:登陆请求
        **********************************************************************/
    
        void slot_login_req();
    
        /*********************************************************************
        *                           槽函数:登陆响应
        *参数:data:接收的数据
        **********************************************************************/
    
        void slot_login_ack(QByteArray data);
    
    private slots:
    
        /*********************************************************************
        *                           槽函数:心跳滴答函数
        *说明:1滴答触发1次
        **********************************************************************/
    
        void slot_tick();
    
    private:
    
        /*********************************************************************
        *                           变量
        **********************************************************************/
    
        /*********************************************************************
        *                           属性:用户号
        **********************************************************************/
    
        QString _user_id;
    
        /*********************************************************************
        *                           属性:密码
        **********************************************************************/
    
        QString _password;
    
        /*********************************************************************
        *                           属性:记住密码标志
        **********************************************************************/
    
        bool _flag_remember;
    
        /*********************************************************************
        *                           属性:自动登录标志
        **********************************************************************/
    
        bool _flag_auto;
    
        /*********************************************************************
        *                           滴答定时器
        **********************************************************************/
    
        QTimer *timer;
    
        /*********************************************************************
        *                           登录计数器
        **********************************************************************/
    
        int Login_Counter;
    };
    
    #endif // LOGIN_GUI_H
    

    login_gui.c

    /*********************************************************************
    *                           登陆界面模块主文件
    *                       (c)copyright 2014,jdh
    *                         All Right Reserved
    *新建日期:2014/1/29 by jdh
    *修改日期:2014/2/1 by jdh
    *修改日期:2014/2/17 by jdh
    *修改日期:2014/2/18 by jdh
    *修改日期:2014/2/16 by jdh
    *修改日期:2014/5/4 by jdh
    *修改日期:2014/5/5 by jdh
    *修改日期:2014/5/13 by jdh
    **********************************************************************/
    
    /*********************************************************************
    *                           头文件
    **********************************************************************/
    
    #include "login_gui.h"
    
    /*********************************************************************
    *                           函数
    **********************************************************************/
    
    /*********************************************************************
    *                           初始化函数
    **********************************************************************/
    
    Login_Gui::Login_Gui()
    {
        //初始化变量
        Login_Counter = 0;
    
        //滴答初始化
        timer = new QTimer(this);
        //绑定信号槽
        connect(timer, SIGNAL (timeout()), this , SLOT(slot_tick()));
    
        QFile file_cfg("cfg.txt");
        QByteArray arr;
        bool ok;
        int flag_remember = 0;
        int flag_auto_login = 0;
        int id = 0;
        int password = 0;
        QString str;
        int i = 0;
        int j = 0;
    
        //属性初始化
        _user_id = "";
        _password = "";
        _flag_remember = false;
        _flag_auto = false;
    
        //判断文件是否存在
        if (!file_cfg.exists())
        {
            file_cfg.close();
        }
        else
        {
            //文件存在
            file_cfg.open(QIODevice::ReadOnly);
            //读取文件
            do
            {
                str.clear();
                arr = file_cfg.readLine();
                for (i = 0;i < arr.count();i++)
                {
                    if ((arr.at(i) >= '0' && arr.at(i) <= '9') || \
                        (arr.at(i) >= 'a' && arr.at(i) <= 'f') || \
                         arr.at(i) == 'x')
                    {
                        str[j++] = arr.at(i);
                    }
                }
                flag_remember = str.toInt(&ok,16);
                if (!ok)
                {
                    break;
                }
    
                str.clear();
                arr = file_cfg.readLine();
                for (i = 0;i < arr.count();i++)
                {
                    if ((arr.at(i) >= '0' && arr.at(i) <= '9') || \
                        (arr.at(i) >= 'a' && arr.at(i) <= 'f') || \
                         arr.at(i) == 'x')
                    {
                        str[j++] = arr.at(i);
                    }
                }
                flag_auto_login = str.toInt(&ok,16);
                if (!ok)
                {
                    break;
                }
    
                str.clear();
                arr = file_cfg.readLine();
                for (i = 0;i < arr.count();i++)
                {
                    if ((arr.at(i) >= '0' && arr.at(i) <= '9') || \
                        (arr.at(i) >= 'a' && arr.at(i) <= 'f') || \
                         arr.at(i) == 'x')
                    {
                        str[j++] = arr.at(i);
                    }
                }
                id = str.toInt(&ok,16);
                if (!ok)
                {
                    break;
                }
    
                str.clear();
                arr = file_cfg.readLine();
                for (i = 0;i < arr.count();i++)
                {
                    if ((arr.at(i) >= '0' && arr.at(i) <= '9') || \
                        (arr.at(i) >= 'a' && arr.at(i) <= 'f') || \
                         arr.at(i) == 'x')
                    {
                        str[j++] = arr.at(i);
                    }
                }
                password = str.toInt(&ok,16);
                if (!ok)
                {
                    break;
                }
    
                //判断是否记住密码
                if (flag_remember == VALID_FLAG)
                {
                    _user_id = QString::number(id,10);
                    _password = QString::number(password,10);
                    _flag_remember = true;
    
                    //判断是否自动登录
                    if (flag_auto_login == VALID_FLAG)
                    {
                        _flag_auto = true;
                        slot_login_req();
                    }
                }
            } while (0);
    
            file_cfg.close();
        }
    }
    
    /*********************************************************************
    *                           解构函数
    **********************************************************************/
    
    Login_Gui::~Login_Gui()
    {
    }
    
    /*********************************************************************
    *                           属性读取:用户号
    **********************************************************************/
    
    QString Login_Gui::user_id()
    {
        return _user_id;
    }
    
    /*********************************************************************
    *                           属性写入:用户号
    **********************************************************************/
    
    void Login_Gui::set_user_id(QString str)
    {
        if (_user_id != str)
        {
            _user_id = str;
            emit sig_user_id_changed();
        }
    }
    
    /*********************************************************************
    *                           属性读取:密码
    **********************************************************************/
    
    QString Login_Gui::password()
    {
        return _password;
    }
    
    /*********************************************************************
    *                           属性写入:密码
    **********************************************************************/
    
    void Login_Gui::set_password(QString str)
    {
        if (_password != str)
        {
            _password = str;
            emit sig_password_changed();
        }
    }
    
    /*********************************************************************
    *                           属性读取:记住密码标志
    **********************************************************************/
    
    bool Login_Gui::flag_remember()
    {
        return _flag_remember;
    }
    
    /*********************************************************************
    *                           属性写入:记住密码标志
    **********************************************************************/
    
    void Login_Gui::set_flag_remember(bool flag)
    {
        if (_flag_remember != flag)
        {
            _flag_remember = flag;
            emit sig_flag_remember_changed();
        }
    }
    
    /*********************************************************************
    *                           属性读取:自动登陆标志
    **********************************************************************/
    
    bool Login_Gui::flag_auto()
    {
        return _flag_auto;
    }
    
    /*********************************************************************
    *                           属性写入:自动登陆标志
    **********************************************************************/
    
    void Login_Gui::set_flag_auto(bool flag)
    {
        if (_flag_auto != flag)
        {
            _flag_auto = flag;
            emit sig_flag_auto_changed();
        }
    }
    
    /*********************************************************************
    *                           槽函数:登陆请求
    **********************************************************************/
    
    void Login_Gui::slot_login_req()
    {   
        //初始化计数器
        Login_Counter = 0;
        //开始尝试登陆
        timer->start(INTERVAL_LOGIN);
        slot_tick();
    }
    
    /*********************************************************************
    *                           槽函数:登陆响应
    *参数:data:接收的数据
    **********************************************************************/
    
    void Login_Gui::slot_login_ack(QByteArray data)
    {
        uint32_t id = 0;
        uint32_t password = 0;
        int flag_remember = 0;
        int flag_auto_login = 0;
        uint8_t result = 0;
        bool ok;
    
    #ifdef DEBUG
        qDebug() << "接收帧:尝试登陆" << (uint8_t)data[0] << (uint8_t)data[1] << (uint8_t)data[2];
    #endif
    
        //清除计数器
        Login_Counter = 0;
        //停止登录尝试
        timer->stop();
    
        //判断用户号和密码是否匹配
        id = ((uint8_t)data[6] << 24) +\
             ((uint8_t)data[7] << 16) + \
             ((uint8_t)data[8] << 8) + \
              (uint8_t)data[9];
        password = ((uint8_t)data[10] << 24) +\
                   ((uint8_t)data[11] << 16) + \
                   ((uint8_t)data[12] << 8) + \
                    (uint8_t)data[13];
        //登陆结果
        result = (uint8_t)data[LEN_FRAME_HEAD];
        //判断登陆结果
        switch (result)
        {
            //登陆成功
        case 0:
            {
                //判断用户名和密码是否正确
                if (id == (uint32_t)_user_id.toInt(&ok) && password == (uint32_t)_password.toInt(&ok))
                {
                    //发送登陆成功信号
                    emit sig_login_result(0);
    
                #ifdef DEBUG
                    qDebug() << "登陆成功" << "用户号" << _user_id << "密码" << _password;
                #endif
    
                    //判断是否勾选记住密码以及自动登录
                    if (_flag_remember)
                    {
                        flag_remember = VALID_FLAG;
                    }
                    if (_flag_auto)
                    {
                        flag_auto_login = VALID_FLAG;
                    }
    
                    //将用户名密码保存
                    QFile file_cfg("cfg.txt");
                    file_cfg.open(QIODevice::WriteOnly);
                    QTextStream out(&file_cfg);
                    out << QString::number(flag_remember,16) << "\r\n" \
                        << QString::number(flag_auto_login,16) << "\r\n" \
                        << _user_id << "\r\n" \
                        << _password << "\r\n";
                    file_cfg.close();
                }
    
                break;
            }
            //无此用户名
        case 1:
            {
            #ifdef DEBUG
                qDebug() << "登陆失败" << "用户号不存在";
            #endif
    
                //发送登录失败信号
                emit sig_login_result(1);
    
                break;
            }
            //密码错误
        case 2:
            {
            #ifdef DEBUG
                qDebug() << "登陆失败" << "密码错误";
            #endif
    
                //发送登录失败信号
                emit sig_login_result(2);
    
                break;
            }
        }
    }
    
    /*********************************************************************
    *                           槽函数:心跳滴答函数
    *说明:1滴答触发1次
    **********************************************************************/
    
    void Login_Gui::slot_tick()
    {
        QByteArray frame;
        bool ok;
    
        //登录计数器
        Login_Counter++;
        if (Login_Counter > NUM_LOGIN)
        {
        #ifdef DEBUG
            qDebug() << "登录失败" << "达到最大尝试登陆次数:" << NUM_LOGIN;
        #endif
    
            //清除计数器
            Login_Counter = 0;
    
            //停止登陆尝试
            timer->stop();
            //发送登陆失败信号
            emit sig_login_result(3);
    
            return;
        }
    
        //发送登陆请求
        //报文
        frame.clear();
        //发送网络帧
    #ifdef DEBUG
        qDebug() << "发送帧:发送登陆请求";
    #endif
        emit sig_net_tx_frame_with_id((uint32_t)_user_id.toInt(&ok),(uint32_t)_password.toInt(&ok),\
                                      CMD_USER_LOGIN_REQUEST,0,frame);
    }
    





    展开全文
  • 很好的登陆界面编制的程序,完全是用Visual C++ 编制的哦!
  • C++登录界面程序

    2019-04-18 19:04:36
    该程序通过连接Access数据库实现登录功能,同时,密码采用MD5加密技术,供大家参考
  • Windows编程(C++):登陆界面设计

    千次阅读 2019-03-31 18:07:45
    MessageBox(hwnd, TEXT("登陆成功"), TEXT("登陆成功"), 0); } else { MessageBox(hwnd, TEXT("登录失败!"), TEXT("登陆失败!"), 0); } } if ((HWND)lParam == q6)//此处为判断用户点击了...
    #include <windows.h>
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//Windows回调函数提前声明
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)//主函数
    {
    	static TCHAR szAppName[] = TEXT("MyWindows");
    	HWND hwnd;//接收下面创建的窗口句柄
    	MSG msg;//消息类型,其原型为结构体
    	WNDCLASS wndclass;//窗口类定义,WNDCLASS原型为结构体
    
    	wndclass.style = CS_HREDRAW | CS_VREDRAW;
    	wndclass.lpfnWndProc = WndProc;
    	wndclass.cbClsExtra = 0;
    	wndclass.cbWndExtra = 0;
    	wndclass.hInstance = hInstance;
    	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    	wndclass.lpszMenuName = NULL;
    	wndclass.lpszClassName = szAppName;//以上为wndclass窗口类结构体的成员,其中设置的参数均为Windows已定义好的
    
    	RegisterClass(&wndclass);//注册窗口类结构体,注册之后才能正常显示窗口
    	hwnd = CreateWindow(szAppName,
    		TEXT("用户登录"),
    		WS_OVERLAPPEDWINDOW,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		NULL,
    		NULL,
    		hInstance,
    		NULL);//CreateWindow函数作用为创建一个窗口,其返回值为一个窗口句柄HWND类型的变量,HWND其原型为一个结构体指针
    
    	ShowWindow(hwnd, iCmdShow);
    
    	while (GetMessage(&msg, NULL, 0, 0))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}//消息循环,从而不断获取消息
    
    	return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//消息回调函数,这里不需要将所有的消息比如点击一下鼠标之类的都写入,只需要编写想要完成的消息与响应,其余的会按默认处理
    {
    	static HWND q1, q2, q3, q4, q5, q6;//用6个窗口句柄分别标识2个标签,2个按钮和2个文本框
    	static TCHAR password[100];
    	static TCHAR name[100];
    	switch (message)
    	{
    	case WM_CREATE:
    		q1 = CreateWindow(TEXT("STATIC"),
    			TEXT("用户名:"),
    			WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE | SS_RIGHT,
    			290,
    			170,
    			140,
    			60,
    			hwnd,//此处为父窗口句柄,表示此标签窗口是在hwnd大窗口里面的,下同
    			NULL,
    			NULL,
    			NULL);
    		q2 = CreateWindow(TEXT("STATIC"),
    			TEXT("密码:"),
    			WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE | SS_RIGHT,
    			290,
    			275,
    			140,
    			60,
    			hwnd,
    			NULL,
    			NULL,
    			NULL);
    		q3 = CreateWindow(TEXT("EDIT"),
    			TEXT(""),
    			WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
    			511,
    			170,
    			300,
    			60,
    			hwnd,
    			NULL,
    			NULL,
    			NULL);
    		q4 = CreateWindow(TEXT("EDIT"),
    			TEXT(""),
    			WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL|ES_PASSWORD,
    			511,
    			275,
    			300,
    			60,
    			hwnd,
    			NULL,
    			NULL,
    			NULL);
    		q5 = CreateWindow(TEXT("BUTTON"),
    			TEXT("登录"),
    			WS_CHILD | WS_VISIBLE | WS_BORDER | BS_FLAT,
    			470,
    			414,
    			125,
    			75,
    			hwnd,
    			NULL,
    			NULL,
    			NULL);//q5为登录按钮句柄
    		q6 = CreateWindow(TEXT("BUTTON"),
    			TEXT("退出"),
    			WS_CHILD | WS_VISIBLE | WS_BORDER | BS_FLAT,
    			690,
    			414,
    			125,
    			75,
    			hwnd,
    			NULL,
    			NULL,
    			NULL);
    		return 0;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		return 0;
    	case WM_COMMAND:
    		if ((HWND)lParam == q5)//WM_COMMAND消息用法见百度,此处为判断用户点击了登录按钮
    		{
    			GetWindowText(q3, name, 5);
    			GetWindowText(q4, password, 4);
    			TCHAR a[] = TEXT("admin");
    			TCHAR b[] = TEXT("1234");
    			if (_tcscmp(name,a)==0&&_tcscmp(password,b)==0)
    			{
    				MessageBox(hwnd, TEXT("登陆成功"), TEXT("登陆成功"), 0);
    			}
    			else
    			{
    				MessageBox(hwnd, TEXT("登录失败!"), TEXT("登陆失败!"), 0);
    			}
    		}
    		if ((HWND)lParam == q6)//此处为判断用户点击了退出按钮,就销毁窗口,DestroyWindow会发送WM_DESTROY和WM_NCDESTROY消息给回调函数
    		{
    			DestroyWindow(hwnd);
    		}
    		return 0;
    	}
    
    	return DefWindowProc(hwnd, message, wParam, lParam);
    }

    最后的用户名密码验证部分有点问题

    展开全文
  • 用 visual c++ 6.0 编写的 用户登录界面 很简单 附带程序设计报告 有登录功能 时间原因 注册待完善
  • 仿QQ登陆聊天界面源码C++ 有聊天功能 留言功能 登陆功能 用户注册功能 后台服务器 在线人数等功能
  • MFC的登陆界面

    2018-01-25 11:20:02
    MFC的登陆界面MFC的登陆界面MFC的登陆界面MFC的登陆界面
  • 本人最近在学新的C++Bulder开发工具XE8/10,以前只用过BCB6,不会delphi,都是出自一家公司,还是有很多相似的地方,CB用多了,delphi也能看懂一点。在FireMonkey群里看到2位网友上传的界面Demo,下载学习了一下,...
  • windows登陆界面 修改 默认开机界面修改 漂亮的登陆界面
  • 仿qq登陆界面

    2013-03-21 15:30:05
    仿qq登陆界面C++编写,工具是VS2008
  • 整体功能介绍/***********************************************************实现一个登陆界面1 输出一个登陆界面2 用户名能够实现邮箱验证,regex库,密码要不可见3 进度条的模拟实现4 音乐播放*******************...

    来源:blog.csdn.net/jackJruit/article/details/108287490

    一.整体功能介绍

    /***********************************************************

    实现一个登陆界面

    1 输出一个登陆界面

    2 用户名能够实现邮箱验证,regex库,密码要不可见

    3 进度条的模拟实现

    4 音乐播放

    ***************************************************************/

    二.分步实现

    1.输出一个登陆界面

    首先对此功能使用到的函数进行简单的介绍。

    system();

    int system(const char *command) 把 command 指定的命令名称或程序名称传给要被命令处理器执行的主机环境,并在命令完成后返回。使用此函数需要包含头文件:#include

    *<1>调整窗口

    system函数+dos指令

    标题:title 标题名

    颜色:color f0

    大小:mode con cols = 40 lins =8;//此处可自己定义cols和lins大小

    例如:

    system("calc");打开计算器“”里面是计算机的命令。

    system("pause");//防止闪屏

    实现

    void setWindosStyle(void){system("title 邮箱验证");system("color f0");system("mode con cols=40 lines=8");}

    2.用户及密码

    此处要实现密码不可见,故使用到了_getch()函数

    void setUserNamPass(uin8_t* username, uin8_t* userpassword){cout << "\t用户名:";cin >> username;cout << "\t密 码:";//cin >> userpassword;// 密码不可见:字符串当做字符处理// 每次按键输出一个*号就可以,然后把所有按键保存到password里面char key;uin32_t i = 0;while ((key = _getch()) != '\r'){if (i < 6){userpassword[i++] = key;putchar('*');}else{cout << "密码过长" << endl;system("pause");return;}}//字符串结束标记:\0;userpassword[i] = '\0';}

    3.邮箱验证

    此功能是用来判断输入需要构造正则表达式对象,然后调用regex_match()函数来判断输入字符串是否满足要求;使用到C++头文件#include 。

    bool checkEmail(uin8_t* username){bool result = false;//ctb @163 .com.cnregex object("(\\w+)@(\\w+)(\\.(\\w+))+");/*1. 字母a-z A-Z 或者下划线或者0-9,正则表达式*///+ 多个result = regex_match(username, object);return result;}

    4. 进度条的模拟实现

    此功能使用到了#include 头文件的Sleep()函数。

    void proc(void){string str("-");for (uin32_t i = 0; i <= 20; i++){system("cls");cout << str << endl;cout << i * 5 << "%" << endl;str += "-";Sleep(500);}printf("sucess....!\n");}

    5 .播放音乐

    此功能使用到 #include(mmsystem.h)头文件里的mciSendString()函数。

    首先下载一个音乐MPS文件,然后将其拷贝到此过程工程目录下。注意:实现此功能需加载静态包,

    #pragma comment(lib,“winmm.lib”)//加载静态包

    void palyMusic(void){mciSendString("open 1.mp3 alias music", 0, 0, 0);mciSendString("play music repeat", 0, 0, 0);}

    6.测试

    <1>.头文件

    //#pragma once#ifndef _TEST_H_#define _TEST_H_typedef int uin32_t;typedef char uin8_t;#include#include //c++引用中标准,一般是c+原来的文件名字#include //_getch()#include //正则表达式#include #include #include using namespace std;void setWindosStyle();void setUserNamPass(uin8_t* username, uin8_t*userpassword);bool checkEmail(uin8_t* username);void proc(void);void palyMusic(void);#endif // !_TEST_H_

    <2>.main函数

    #include "test.h"uin32_t main(void){//用户名+密码uin8_t username[20] = "";uin8_t userpassword[7] = "";setWindosStyle();setUserNamPass(username,userpassword);if ((checkEmail(username)) == true){if (!(strcmp(username, "ctb@163.com.cn")&&strcmp(userpassword,"12345"))){//弹出进度条proc();cout << "music begin!!!" << endl;//在播放音乐palyMusic();}else{cout << "用户名或者密码错误" << endl;}}else{printf("inpute email name no standard\n");}system("pause");return 0;}

    简单分享快乐学习,如有错误请多包涵!

    PS:如果没有你的关注,那我所做的将毫无意义!欢迎分享,点赞,在看。

    展开全文
  • [url=http://download.csdn.net/detail/wx384479289/9106771]用C++ Builder改写的FMX炫酷界面及仿QQ登陆界面Demo(CBXE8源码)[/url] 以前用过BCB6,现在新学开发工具C++ Bulder XE8,发现FireMonkey比较有特色,不过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,447
精华内容 6,178
关键字:

c++登录界面

c++ 订阅