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

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

 

环境:

主机:WIN7

开发环境:Qt5.2.1

说明:

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

效果图:

源代码:

 

前台qml文件

login.qml

[javascript] view plain copy

  1. /*********************************************************************
  2. *                            登陆界面qml文件
  3. *                       (c)copyright 2014,jdh
  4. *                         All Right Reserved
  5. *新建日期:2014/4/29 by jdh
  6. *修改日期:2014/4/30 by jdh
  7. *修改日期:2014/5/4 by jdh
  8. *修改日期:2014/5/5 by jdh
  9. **********************************************************************/
  10. import QtQuick 2.0
  11. import "content"
  12. import Login_Gui 1.0
  13. Rectangle
  14. {
  15. id: login
  16. width: 320; height: 512
  17. SystemPalette { id: activePalette }
  18. //C++组件:用户界面
  19. Login_Gui
  20. {
  21. id:login_gui
  22. onSig_login_result:
  23. {
  24. //关闭登陆动画
  25. load_gif.opacity = 0
  26. //根据登陆结果处理
  27. switch (result)
  28. {
  29. //登陆成功
  30. case 0:
  31. message.text = "登陆成功"
  32. message.opacity = 1
  33. break;
  34. //无此用户名
  35. case 1:
  36. message.text = "登陆失败:无此用户名"
  37. message.opacity = 1
  38. break;
  39. //密码错误
  40. case 2:
  41. message.text = "登陆失败:密码错误"
  42. message.opacity = 1
  43. break;
  44. //达到最大登陆次数
  45. case 3:
  46. message.text = "登陆失败:达到最大登陆次数"
  47. message.opacity = 1
  48. break;
  49. }
  50. }
  51. }
  52. //背景图片
  53. Image
  54. {
  55. id: background
  56. anchors { top: parent.top; bottom: parent.bottom }
  57. anchors.fill: parent
  58. source: "pics/pic1.png"
  59. fillMode: Image.PreserveAspectCrop
  60. }
  61. //消息框
  62. Message
  63. {
  64. id: message
  65. font_size: login.height * 0.03
  66. anchors {centerIn: parent}
  67. opacity: 0
  68. }
  69. //登陆动画
  70. AnimatedImage
  71. {
  72. id: load_gif; source: "pics/load.gif"
  73. anchors {horizontalCenter: parent.horizontalCenter; verticalCenter: parent.verticalCenter}
  74. z: 100
  75. opacity: 0
  76. }
  77. //顶栏
  78. Item
  79. {
  80. id: top_bar
  81. width: login.width; height: login.height * 0.06
  82. anchors.top: parent.top
  83. Text
  84. {
  85. id: title
  86. anchors { top: parent.top; horizontalCenter: parent.horizontalCenter }
  87. //text: "登陆"
  88. text: "登陆"
  89. font.bold: true
  90. font.pointSize: login.height * 0.06 * 0.4
  91. color: "dark red"
  92. }
  93. }
  94. //空白栏
  95. Item
  96. {
  97. id: space1
  98. width: login.width; height: login.height * 0.1
  99. anchors.top: top_bar.bottom
  100. }
  101. //登陆框
  102. Rectangle
  103. {
  104. id: rect1
  105. width: login.width * 0.8; height: login.height * 0.3
  106. anchors { top: space1.bottom; horizontalCenter: parent.horizontalCenter }
  107. border.color: "#707070"
  108. color: "transparent"
  109. radius: 8
  110. Row
  111. {
  112. spacing: rect1.width * 0.05
  113. Item
  114. {
  115. width: rect1.width * 0.05; height: rect1.height
  116. }
  117. Column
  118. {
  119. spacing: rect1.height * 0.025
  120. Item
  121. {
  122. width: rect1.width * 0.8; height: rect1.height * 0.05
  123. }
  124. LineInput
  125. {
  126. id: txt_user_id
  127. width: rect1.width * 0.8; height: rect1.height * 0.2
  128. font_size:height * 0.7
  129. //anchors {horizontalCenter: rect1.horizontalCenter; top: rect1.top; topMargin: 8}
  130. hint: "请输入用户号"
  131. text:login_gui.user_id
  132. }
  133. LineInput
  134. {
  135. id: txt_password
  136. width: rect1.width * 0.8; height: rect1.height * 0.2
  137. font_size:height * 0.7
  138. //anchors {horizontalCenter: rect1.horizontalCenter; bottom: btn_login.top;  bottomMargin: rect1.height * 0.1}
  139. hint: "请输入密码"
  140. text:login_gui.password
  141. }
  142. Row
  143. {
  144. spacing: rect1.width * 0.1
  145. Button
  146. {
  147. id: btn_login
  148. width: rect1.width * 0.35; height: rect1.height * 0.2
  149. //anchors { left: rect1.left; leftMargin: 28; bottom: rect1.bottom; bottomMargin: 8 }
  150. text: "登陆"
  151. onClicked: login_req()
  152. }
  153. Button
  154. {
  155. id: btn_quit
  156. width: rect1.width * 0.35; height: rect1.height * 0.2
  157. //anchors { right: rect1.right; rightMargin: 28; bottom: rect1.bottom; bottomMargin: 8 }
  158. text: "退出"
  159. onClicked:
  160. {
  161. Qt.quit();
  162. }
  163. }
  164. }
  165. Row
  166. {
  167. spacing: rect1.width * 0.1
  168. CheckBox
  169. {
  170. id: check1
  171. width: rect1.width * 0.35; height: rect1.height * 0.2
  172. //anchors { left: rect1.left; top: rect1.bottom }
  173. caption: "记住密码"
  174. selected: login_gui.flag_remember
  175. }
  176. CheckBox
  177. {
  178. id: check2
  179. width: rect1.width * 0.35; height: rect1.height * 0.2
  180. //anchors { right: rect1.right; top: rect1.bottom }
  181. caption: "自动登陆"
  182. selected: login_gui.flag_auto
  183. }
  184. }
  185. }
  186. }
  187. }
  188. //android自带键处理
  189. FocusScope
  190. {
  191. focus: true
  192. Keys.onReleased:
  193. {
  194. if (event.key == Qt.Key_Back)
  195. {
  196. console.log("qml login quit")
  197. login.sig_btn_quit()
  198. }
  199. }
  200. }
  201. //登陆请求函数
  202. function login_req()
  203. {
  204. //判断用户名是否有效
  205. if (txt_user_id.text == "")
  206. {
  207. message.text = "请输入用户名"
  208. message.opacity = 1
  209. return
  210. }
  211. //判断密码是否有效
  212. if (txt_password.text == "")
  213. {
  214. message.text = "请输入密码"
  215. message.opacity = 1
  216. return
  217. }
  218. //显示登陆动画
  219. load_gif.opacity = 1
  220. //登陆请求
  221. login_gui.user_id = txt_user_id.text
  222. login_gui.password = txt_password.text
  223. login_gui.flag_remember = check1.selected
  224. login_gui.flag_auto = check2.selected
  225. login_gui.slot_login_req()
  226. }
  227. //    //信号槽绑定
  228. //    Component.onCompleted:
  229. //    {
  230. //        login_gui.sig_user_id_changed.connect(login_gui.slot_btn_login)
  231. //    }
  232. }

后台C++代码

main.c

[cpp] view plain copy

  1. /*********************************************************************
  2. *                               主文件
  3. *                       (c)copyright 2014,jdh
  4. *                         All Right Reserved
  5. *新建日期:2014/1/27 by jdh
  6. *修改日期:2014/1/28 by jdh
  7. *修改日期:2014/2/4 by jdh
  8. *修改日期:2014/2/18 by jdh
  9. *修改日期:2014/2/27 by jdh
  10. *修改日期:2014/2/28 by jdh
  11. *修改日期:2014/3/1 by jdh
  12. *修改日期:2014/4/10 by jdh
  13. *修改日期:2014/5/4 by jdh
  14. **********************************************************************/
  15. #include "world.h"
  16. #include "main_gui.h"
  17. #include "login_gui.h"
  18. #include "light_gui.h"
  19. #include "heart_beat.h"
  20. #include "net.h"
  21. #include "data_sync_center.h"
  22. #include "set_ctrl_state.h"
  23. int main(int argc, char *argv[])
  24. {
  25. QGuiApplication app(argc, argv);
  26. //注册组件到QML
  27. qmlRegisterType<Login_Gui>("Login_Gui", 1, 0, "Login_Gui");
  28. QtQuick2ApplicationViewer viewer;
  29. viewer.setMainQmlFile(QStringLiteral("qml/SH_User/login.qml"));
  30. viewer.showExpanded();
  31. return app.exec();
  32. }

login_gui.h

[cpp] view plain copy

  1. /*********************************************************************
  2. *                           登陆界面模块头文件
  3. *                       (c)copyright 2014,jdh
  4. *                         All Right Reserved
  5. *新建日期:2014/1/29 by jdh
  6. *修改日期:2014/2/1 by jdh
  7. *修改日期:2014/2/18 by jdh
  8. *修改日期:2014/3/18 by jdh
  9. *修改日期:2014/5/4 by jdh
  10. *修改日期:2014/5/5 by jdh
  11. *修改日期:2014/5/13 by jdh
  12. **********************************************************************/
  13. #ifndef LOGIN_GUI_H
  14. #define LOGIN_GUI_H
  15. /*********************************************************************
  16. *                               头文件
  17. **********************************************************************/
  18. #include "world.h"
  19. /*********************************************************************
  20. *                               宏定义
  21. **********************************************************************/
  22. /*********************************************************************
  23. *                               登录间隔
  24. *单位:ms
  25. **********************************************************************/
  26. #define INTERVAL_LOGIN          500
  27. /*********************************************************************
  28. *                               最大登录次数
  29. **********************************************************************/
  30. #define NUM_LOGIN               5
  31. /*********************************************************************
  32. *                               数据结构
  33. **********************************************************************/
  34. /*********************************************************************
  35. *                               登录界面类
  36. **********************************************************************/
  37. class Login_Gui : public QObject
  38. {
  39. Q_OBJECT
  40. //属性:用户名
  41. Q_PROPERTY(QString user_id READ user_id WRITE set_user_id NOTIFY sig_user_id_changed)
  42. //属性:密码
  43. Q_PROPERTY(QString password READ password WRITE set_password NOTIFY sig_password_changed)
  44. //属性:记住密码标志
  45. Q_PROPERTY(bool flag_remember READ flag_remember \
  46. WRITE set_flag_remember NOTIFY sig_flag_remember_changed)
  47. //属性:自动登录标志
  48. Q_PROPERTY(bool flag_auto READ flag_auto \
  49. WRITE set_flag_auto NOTIFY sig_flag_auto_changed)
  50. public:
  51. /*********************************************************************
  52. *                           函数
  53. **********************************************************************/
  54. /*********************************************************************
  55. *                           初始化函数
  56. **********************************************************************/
  57. Login_Gui();
  58. /*********************************************************************
  59. *                           解构函数
  60. **********************************************************************/
  61. ~Login_Gui();
  62. /*********************************************************************
  63. *                           属性读取:用户号
  64. **********************************************************************/
  65. QString user_id();
  66. /*********************************************************************
  67. *                           属性写入:用户号
  68. **********************************************************************/
  69. void set_user_id(QString str);
  70. /*********************************************************************
  71. *                           属性读取:密码
  72. **********************************************************************/
  73. QString password();
  74. /*********************************************************************
  75. *                           属性写入:密码
  76. **********************************************************************/
  77. void set_password(QString str);
  78. /*********************************************************************
  79. *                           属性读取:记住密码标志
  80. **********************************************************************/
  81. bool flag_remember();
  82. /*********************************************************************
  83. *                           属性写入:记住密码标志
  84. **********************************************************************/
  85. void set_flag_remember(bool flag);
  86. /*********************************************************************
  87. *                           属性读取:自动登陆标志
  88. **********************************************************************/
  89. bool flag_auto();
  90. /*********************************************************************
  91. *                           属性写入:自动登陆标志
  92. **********************************************************************/
  93. void set_flag_auto(bool flag);
  94. signals:
  95. /*********************************************************************
  96. *                           属性改变信号:用户号
  97. **********************************************************************/
  98. void sig_user_id_changed();
  99. /*********************************************************************
  100. *                           属性改变信号:密码
  101. **********************************************************************/
  102. void sig_password_changed();
  103. /*********************************************************************
  104. *                           属性改变信号:记住密码标志
  105. **********************************************************************/
  106. void sig_flag_remember_changed();
  107. /*********************************************************************
  108. *                           属性改变信号:自动登陆标志
  109. **********************************************************************/
  110. void sig_flag_auto_changed();
  111. /*********************************************************************
  112. *                           信号:登陆结果
  113. *参数:result:0:成功
  114. *           1:无此用户名
  115. *           2:密码错误
  116. *           3:达到登陆的最大次数
  117. **********************************************************************/
  118. void sig_login_result(int result);
  119. /*********************************************************************
  120. *                               发送网络帧
  121. *参数:id:用户名
  122. *    password:密码
  123. *    cmd:帧命令
  124. *    index:发送序列号
  125. *    frame:发送的报文
  126. **********************************************************************/
  127. void sig_net_tx_frame_with_id(uint32_t id,uint32_t password,int cmd,uint16_t index,QByteArray frame);
  128. public slots:
  129. /*********************************************************************
  130. *                           槽函数:登陆请求
  131. **********************************************************************/
  132. void slot_login_req();
  133. /*********************************************************************
  134. *                           槽函数:登陆响应
  135. *参数:data:接收的数据
  136. **********************************************************************/
  137. void slot_login_ack(QByteArray data);
  138. private slots:
  139. /*********************************************************************
  140. *                           槽函数:心跳滴答函数
  141. *说明:1滴答触发1次
  142. **********************************************************************/
  143. void slot_tick();
  144. private:
  145. /*********************************************************************
  146. *                           变量
  147. **********************************************************************/
  148. /*********************************************************************
  149. *                           属性:用户号
  150. **********************************************************************/
  151. QString _user_id;
  152. /*********************************************************************
  153. *                           属性:密码
  154. **********************************************************************/
  155. QString _password;
  156. /*********************************************************************
  157. *                           属性:记住密码标志
  158. **********************************************************************/
  159. bool _flag_remember;
  160. /*********************************************************************
  161. *                           属性:自动登录标志
  162. **********************************************************************/
  163. bool _flag_auto;
  164. /*********************************************************************
  165. *                           滴答定时器
  166. **********************************************************************/
  167. QTimer *timer;
  168. /*********************************************************************
  169. *                           登录计数器
  170. **********************************************************************/
  171. int Login_Counter;
  172. };
  173. #endif // LOGIN_GUI_H

login_gui.c

[cpp] view plain copy

    1. /*********************************************************************
    2. *                           登陆界面模块主文件
    3. *                       (c)copyright 2014,jdh
    4. *                         All Right Reserved
    5. *新建日期:2014/1/29 by jdh
    6. *修改日期:2014/2/1 by jdh
    7. *修改日期:2014/2/17 by jdh
    8. *修改日期:2014/2/18 by jdh
    9. *修改日期:2014/2/16 by jdh
    10. *修改日期:2014/5/4 by jdh
    11. *修改日期:2014/5/5 by jdh
    12. *修改日期:2014/5/13 by jdh
    13. **********************************************************************/
    14. /*********************************************************************
    15. *                           头文件
    16. **********************************************************************/
    17. #include "login_gui.h"
    18. /*********************************************************************
    19. *                           函数
    20. **********************************************************************/
    21. /*********************************************************************
    22. *                           初始化函数
    23. **********************************************************************/
    24. Login_Gui::Login_Gui()
    25. {
    26. //初始化变量
    27. Login_Counter = 0;
    28. //滴答初始化
    29. timer = new QTimer(this);
    30. //绑定信号槽
    31. connect(timer, SIGNAL (timeout()), this , SLOT(slot_tick()));
    32. QFile file_cfg("cfg.txt");
    33. QByteArray arr;
    34. bool ok;
    35. int flag_remember = 0;
    36. int flag_auto_login = 0;
    37. int id = 0;
    38. int password = 0;
    39. QString str;
    40. int i = 0;
    41. int j = 0;
    42. //属性初始化
    43. _user_id = "";
    44. _password = "";
    45. _flag_remember = false;
    46. _flag_auto = false;
    47. //判断文件是否存在
    48. if (!file_cfg.exists())
    49. {
    50. file_cfg.close();
    51. }
    52. else
    53. {
    54. //文件存在
    55. file_cfg.open(QIODevice::ReadOnly);
    56. //读取文件
    57. do
    58. {
    59. str.clear();
    60. arr = file_cfg.readLine();
    61. for (i = 0;i < arr.count();i++)
    62. {
    63. if ((arr.at(i) >= ‘0‘ && arr.at(i) <= ‘9‘) || \
    64. (arr.at(i) >= ‘a‘ && arr.at(i) <= ‘f‘) || \
    65. arr.at(i) == ‘x‘)
    66. {
    67. str[j++] = arr.at(i);
    68. }
    69. }
    70. flag_remember = str.toInt(&ok,16);
    71. if (!ok)
    72. {
    73. break;
    74. }
    75. str.clear();
    76. arr = file_cfg.readLine();
    77. for (i = 0;i < arr.count();i++)
    78. {
    79. if ((arr.at(i) >= ‘0‘ && arr.at(i) <= ‘9‘) || \
    80. (arr.at(i) >= ‘a‘ && arr.at(i) <= ‘f‘) || \
    81. arr.at(i) == ‘x‘)
    82. {
    83. str[j++] = arr.at(i);
    84. }
    85. }
    86. flag_auto_login = str.toInt(&ok,16);
    87. if (!ok)
    88. {
    89. break;
    90. }
    91. str.clear();
    92. arr = file_cfg.readLine();
    93. for (i = 0;i < arr.count();i++)
    94. {
    95. if ((arr.at(i) >= ‘0‘ && arr.at(i) <= ‘9‘) || \
    96. (arr.at(i) >= ‘a‘ && arr.at(i) <= ‘f‘) || \
    97. arr.at(i) == ‘x‘)
    98. {
    99. str[j++] = arr.at(i);
    100. }
    101. }
    102. id = str.toInt(&ok,16);
    103. if (!ok)
    104. {
    105. break;
    106. }
    107. str.clear();
    108. arr = file_cfg.readLine();
    109. for (i = 0;i < arr.count();i++)
    110. {
    111. if ((arr.at(i) >= ‘0‘ && arr.at(i) <= ‘9‘) || \
    112. (arr.at(i) >= ‘a‘ && arr.at(i) <= ‘f‘) || \
    113. arr.at(i) == ‘x‘)
    114. {
    115. str[j++] = arr.at(i);
    116. }
    117. }
    118. password = str.toInt(&ok,16);
    119. if (!ok)
    120. {
    121. break;
    122. }
    123. //判断是否记住密码
    124. if (flag_remember == VALID_FLAG)
    125. {
    126. _user_id = QString::number(id,10);
    127. _password = QString::number(password,10);
    128. _flag_remember = true;
    129. //判断是否自动登录
    130. if (flag_auto_login == VALID_FLAG)
    131. {
    132. _flag_auto = true;
    133. slot_login_req();
    134. }
    135. }
    136. } while (0);
    137. file_cfg.close();
    138. }
    139. }
    140. /*********************************************************************
    141. *                           解构函数
    142. **********************************************************************/
    143. Login_Gui::~Login_Gui()
    144. {
    145. }
    146. /*********************************************************************
    147. *                           属性读取:用户号
    148. **********************************************************************/
    149. QString Login_Gui::user_id()
    150. {
    151. return _user_id;
    152. }
    153. /*********************************************************************
    154. *                           属性写入:用户号
    155. **********************************************************************/
    156. void Login_Gui::set_user_id(QString str)
    157. {
    158. if (_user_id != str)
    159. {
    160. _user_id = str;
    161. emit sig_user_id_changed();
    162. }
    163. }
    164. /*********************************************************************
    165. *                           属性读取:密码
    166. **********************************************************************/
    167. QString Login_Gui::password()
    168. {
    169. return _password;
    170. }
    171. /*********************************************************************
    172. *                           属性写入:密码
    173. **********************************************************************/
    174. void Login_Gui::set_password(QString str)
    175. {
    176. if (_password != str)
    177. {
    178. _password = str;
    179. emit sig_password_changed();
    180. }
    181. }
    182. /*********************************************************************
    183. *                           属性读取:记住密码标志
    184. **********************************************************************/
    185. bool Login_Gui::flag_remember()
    186. {
    187. return _flag_remember;
    188. }
    189. /*********************************************************************
    190. *                           属性写入:记住密码标志
    191. **********************************************************************/
    192. void Login_Gui::set_flag_remember(bool flag)
    193. {
    194. if (_flag_remember != flag)
    195. {
    196. _flag_remember = flag;
    197. emit sig_flag_remember_changed();
    198. }
    199. }
    200. /*********************************************************************
    201. *                           属性读取:自动登陆标志
    202. **********************************************************************/
    203. bool Login_Gui::flag_auto()
    204. {
    205. return _flag_auto;
    206. }
    207. /*********************************************************************
    208. *                           属性写入:自动登陆标志
    209. **********************************************************************/
    210. void Login_Gui::set_flag_auto(bool flag)
    211. {
    212. if (_flag_auto != flag)
    213. {
    214. _flag_auto = flag;
    215. emit sig_flag_auto_changed();
    216. }
    217. }
    218. /*********************************************************************
    219. *                           槽函数:登陆请求
    220. **********************************************************************/
    221. void Login_Gui::slot_login_req()
    222. {
    223. //初始化计数器
    224. Login_Counter = 0;
    225. //开始尝试登陆
    226. timer->start(INTERVAL_LOGIN);
    227. slot_tick();
    228. }
    229. /*********************************************************************
    230. *                           槽函数:登陆响应
    231. *参数:data:接收的数据
    232. **********************************************************************/
    233. void Login_Gui::slot_login_ack(QByteArray data)
    234. {
    235. uint32_t id = 0;
    236. uint32_t password = 0;
    237. int flag_remember = 0;
    238. int flag_auto_login = 0;
    239. uint8_t result = 0;
    240. bool ok;
    241. #ifdef DEBUG
    242. qDebug() << "接收帧:尝试登陆" << (uint8_t)data[0] << (uint8_t)data[1] << (uint8_t)data[2];
    243. #endif
    244. //清除计数器
    245. Login_Counter = 0;
    246. //停止登录尝试
    247. timer->stop();
    248. //判断用户号和密码是否匹配
    249. id = ((uint8_t)data[6] << 24) +\
    250. ((uint8_t)data[7] << 16) + \
    251. ((uint8_t)data[8] << 8) + \
    252. (uint8_t)data[9];
    253. password = ((uint8_t)data[10] << 24) +\
    254. ((uint8_t)data[11] << 16) + \
    255. ((uint8_t)data[12] << 8) + \
    256. (uint8_t)data[13];
    257. //登陆结果
    258. result = (uint8_t)data[LEN_FRAME_HEAD];
    259. //判断登陆结果
    260. switch (result)
    261. {
    262. //登陆成功
    263. case 0:
    264. {
    265. //判断用户名和密码是否正确
    266. if (id == (uint32_t)_user_id.toInt(&ok) && password == (uint32_t)_password.toInt(&ok))
    267. {
    268. //发送登陆成功信号
    269. emit sig_login_result(0);
    270. #ifdef DEBUG
    271. qDebug() << "登陆成功" << "用户号" << _user_id << "密码" << _password;
    272. #endif
    273. //判断是否勾选记住密码以及自动登录
    274. if (_flag_remember)
    275. {
    276. flag_remember = VALID_FLAG;
    277. }
    278. if (_flag_auto)
    279. {
    280. flag_auto_login = VALID_FLAG;
    281. }
    282. //将用户名密码保存
    283. QFile file_cfg("cfg.txt");
    284. file_cfg.open(QIODevice::WriteOnly);
    285. QTextStream out(&file_cfg);
    286. out << QString::number(flag_remember,16) << "\r\n" \
    287. << QString::number(flag_auto_login,16) << "\r\n" \
    288. << _user_id << "\r\n" \
    289. << _password << "\r\n";
    290. file_cfg.close();
    291. }
    292. break;
    293. }
    294. //无此用户名
    295. case 1:
    296. {
    297. #ifdef DEBUG
    298. qDebug() << "登陆失败" << "用户号不存在";
    299. #endif
    300. //发送登录失败信号
    301. emit sig_login_result(1);
    302. break;
    303. }
    304. //密码错误
    305. case 2:
    306. {
    307. #ifdef DEBUG
    308. qDebug() << "登陆失败" << "密码错误";
    309. #endif
    310. //发送登录失败信号
    311. emit sig_login_result(2);
    312. break;
    313. }
    314. }
    315. }
    316. /*********************************************************************
    317. *                           槽函数:心跳滴答函数
    318. *说明:1滴答触发1次
    319. **********************************************************************/
    320. void Login_Gui::slot_tick()
    321. {
    322. QByteArray frame;
    323. bool ok;
    324. //登录计数器
    325. Login_Counter++;
    326. if (Login_Counter > NUM_LOGIN)
    327. {
    328. #ifdef DEBUG
    329. qDebug() << "登录失败" << "达到最大尝试登陆次数:" << NUM_LOGIN;
    330. #endif
    331. //清除计数器
    332. Login_Counter = 0;
    333. //停止登陆尝试
    334. timer->stop();
    335. //发送登陆失败信号
    336. emit sig_login_result(3);
    337. return;
    338. }
    339. //发送登陆请求
    340. //报文
    341. frame.clear();
    342. //发送网络帧
    343. #ifdef DEBUG
    344. qDebug() << "发送帧:发送登陆请求";
    345. #endif
    346. emit sig_net_tx_frame_with_id((uint32_t)_user_id.toInt(&ok),(uint32_t)_password.toInt(&ok),\
    347. CMD_USER_LOGIN_REQUEST,0,frame);
    348. }

http://blog.csdn.net/jdh99/article/details/25774797

时间: 2024-10-27 03:49:15

QML与C++交互:登陆界面设计的相关文章

java web程序 上机考试登陆界面设计实现

今天是java web上机.做一个登陆注册的界面.要求:jsp.mysql数据库,js做一个美观的界面.功能.可以添加 更多啊.我做的界面被老师狠狠的扣了分.问题在于.当用户没有输入任何信息(没有输入用户名和密码)就直接提交的 时候,页面显示500错误,这里改正的方案2点.我是这么想的.1.要么是提交时弹出一个对话框.显示用户名和密码为空!.这里 要注意的是,弹出的对话框不能阻止用户输入信息,弹出后,依然让用户输入.2.要么是提交按钮后依然跳转到本页面.因为一个form表单 只能跳转到一个页面,

登陆界面设计4.2

今天装上了myeclipse: 然后学着建了java web项目: 并填上了几个简单的控件: 遇到的问题是:不知道浏览器如何显示汉字,总是乱码. 代码如下: <body> <body bgcolor="yellow"> <br><br><br><br><br><br><br> <b><p align="center"> username

安卓登陆界面设计(LayoutInflater)

main.xml代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" andr

iOS设计中不同屏幕适配的方法-登陆界面

在iOS的手机界面设计中,由于不同手机类型的手机的尺寸不同,那么在设计手机界面时就得对屏幕进行适配,这里就以登陆界面的设计为例简单说明下 实现屏幕适配的方法:(屏幕自动适配缩放) 效果: 下面就看下代码实现的过程: 1.在代理中实现的代码: AppDelegate.h // 登陆界面设计 #import <UIKit/UIKit.h> #define ScreenHeight [[UIScreen mainScreen]bounds].size.height//屏幕高度 #define Scr

QML设计登陆界面

QML设计登陆界面 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:Qt5.2 说明: 用QML设计一个应用的登陆界面 效果图: 源代码: main.qml import QtQuick 2.0 Rectangle { id: login_gui width: 320; height: 480 SystemPalette { id: activePalette } //背景图片 Image { id: backgr

设计师们做UI设计和交互设计、界面设计等一般会去什么网站呢?

明明可靠颜值吃饭,却偏偏要靠才华立身,UI设计师就是这样一群神奇的物种.面对“大的同时小一点”.“五彩斑斓黑”.“下班之前给我”……这些甲方大大刁钻的需求,设计师每天都在咬牙微笑讨生活.你可以批评我的作品,但是不能质疑我的业务能力.这是设计师的底线. 言归正传,设计师们做UI设计和交互设计.界面设计等一般会去什么网站呢?我挑选了12个非常实用的设计网站,既有大家众所周知的又包含一些比较小众但是干货满满的网站,涉及素材资源站.字体设计网站.以及动效.视频素材网站等等,希望小编的推荐能对大家的学习和

WPF和Expression Blend开发实例:模拟QQ登陆界面打开和关闭特效

不管在消费者的心中腾讯是一个怎么样的模仿者抄袭者的形象,但是腾讯在软件交互上的设计一直是一流的.正如某位已故的知名产品经理所说的:设计并非外观怎样,感觉如何.设计的是产品的工作原理.我觉得腾讯掌握了其精髓.在2013版的桌面版QQ中,腾讯的登陆界面在打开的时候有一个展开的过程,而关闭的时候有个收缩的过程.效果如图: 借助WPF和Expression Blend,我们可以轻易的实现这么一个效果,最终用比较慢的速率实现这个效果如下: 这个效果一共能够分成两个部分:展开和收缩,具体的代码如下: 收缩的

如何搞定界面设计之构图篇(转)

人家设计得真好!”可是好在什么地方呢,却说不出来.这是阻挡你成为优秀设计师的一大障碍.设计是我们的本行,不会用设计语言来解构画面,是说不过去的. 移动互联网设计发展到今天,有很多传统的设计规律可以遵循,也提出了新的挑战.因为手持设备屏幕较小,如何在有限的页面内呈现或引导有效信息,又不显得杂乱臃肿,考验着设计师的能力. 为什么有的主题或App界面就那么舒服,那么清新,那么有情怀?里面蕴含着哪些最基础的版式设计理念,让我们一块梳理梳理,给初入ui设计的同学做个参考. 想成为一个合格的ui设计师,光会

UI设计教程-界面设计构图

九宫格构图,圆心点放射形构图,三角形构图,SF字形构图.       1.九宫格网格构图     这种版式主要运用在分类为主的一级页面,起到功能分类的作用. 通常在界面设计中,我们会利用网格在界面进行布局,根据水平方向和垂直方向划分所构成的辅助线,设计会进行得非常顺利.在界面设计中,九宫格这种类型的构图更为规范和常用,用户在使用过程中非常的方便,应用功能会显得格外的明确和突出. 九宫格给用户一目了然的感觉,操作便捷是这种构图方式最重要的优势. 九宫格看似简单随意,用好了同样能呈现出奇妙的效果.