• qt day 6


    登录界面

    1. #include "window.h"
    2. #include
    3. #include
    4. Window::Window(QWidget *parent) //构造函数的定义
    5. : QWidget(parent) //显性调用父类的构造函数
    6. {
    7. //判断数据库对象是否包含了自己使用的数据库Student.db
    8. if(!db.contains("Student.db"))
    9. {
    10. //添加一个数据库
    11. db = QSqlDatabase::addDatabase("QSQLITE"); // 表明使用的是sqlite3版本的数据库
    12. //给数据库命名
    13. db.setDatabaseName("St.db");
    14. }
    15. //打开数据库
    16. if(!db.open())
    17. {
    18. QMessageBox::information(this,"提示","数据库打开失败");
    19. }
    20. //此时说明数据库已经创建并打开了,然后创建数据表
    21. //创建数据表要用sql语句,用QSQLQuerry类对象来完成
    22. //准备sql语句
    23. QString sql = "create table if not exists my(" //创建表的sql语句
    24. "name integer primary key," //id主键, 允许自增
    25. "pass integer)"; //性别 字符串
    26. //定义语句执行者
    27. QSqlQuery querry;
    28. if(!querry.exec(sql))
    29. {
    30. QMessageBox::information(this,"失败","创建失败");
    31. return ;
    32. }
    33. //
    34. this->resize(430,330);
    35. this->resize(QSize(800,600));
    36. // this->setMaximumSize(430,330);
    37. // this->setMinimumSize(430,330);
    38. this->setFixedSize(430,330);// 设置尺寸最值
    39. //窗口标题
    40. this->setWindowTitle("WeChat");
    41. //窗口icon
    42. this->setWindowIcon(QIcon(":/icon/111.png"));
    43. //设置背景色
    44. this->setStyleSheet("background-color:skyblue;");
    45. //设置窗口透明度
    46. this->setWindowOpacity(1);
    47. //无参构造
    48. bt1 =new QPushButton;
    49. //给组件指定父组件,让其依附于界面
    50. bt1->setParent(this);
    51. //设置组件文本内容
    52. bt1->setText("开始");
    53. this->setFixedSize(430,330);
    54. //设置按钮组件的大小
    55. bt1->resize(QSize(50,30));
    56. //移动组件位置
    57. bt1->move(200,290);
    58. //设置样式表
    59. bt1->setStyleSheet("background-color:red");
    60. bt1->setIcon(QIcon("E:\\c\\qt1\\111.png"));
    61. //2.构造一个按钮
    62. bt2 = new QPushButton(this);
    63. bt2->setText("取消");
    64. bt2->resize(bt1->size());
    65. bt2->move(300,290);
    66. // bt2->setStyleSheet("background-color:blue");
    67. // bt2->setEnabled(false);
    68. bt2->setIcon(QIcon("E:\\c\\qt1\\111.png"));
    69. //3.创建图标
    70. bt3 =new QLabel(this);
    71. bt3->resize(bt1->size());
    72. bt3->move(100,170);
    73. bt3->setPixmap(QString("E:\\c\\qt1\\111.png"));
    74. //设置 内容自适应
    75. bt3->setScaledContents(true);
    76. //2.构造一个按钮
    77. bt6 = new QPushButton(this);
    78. bt6->setText("注册");
    79. bt6->resize(bt1->size());
    80. bt6->move(100,290);
    81. bt6->setStyleSheet("background-color:yellow");
    82. bt6->setIcon(QIcon("E:\\c\\qt1\\111.png"));
    83. connect(this->bt6,&QPushButton::clicked,this,&Window::bt6_clicked);
    84. //4.创建图标
    85. bt4 =new QLabel(this);
    86. bt4->resize(bt1->size());
    87. bt4->move(100,220);
    88. bt4->setPixmap(QString("E:\\c\\qt1\\222.png"));
    89. //设置 内容自适应
    90. bt4->setScaledContents(true);
    91. /***********************************/
    92. ed1 =new QLineEdit(this);
    93. //ed1->setText(""); //设置编辑器中的文本
    94. //设置占位文本
    95. ed1->setPlaceholderText("密码:");
    96. //设置尺寸
    97. ed1->resize(180,30);
    98. //移动位置
    99. ed1->move(bt4->x()+60,bt4->y());
    100. ed1->setPlaceholderText("密码:");
    101. ed1->setEchoMode(QLineEdit::Password);
    102. //2.构造一个行编辑器,构造时给定父,以及文本内容
    103. ed2 = new QLineEdit(this);
    104. ed2->resize(180,30);
    105. ed2->move(bt3->x()+60,bt3->y());
    106. ed2->setPlaceholderText("账号 /手机 /邮箱...");
    107. /***********************************/
    108. la1 =new QLabel(this);
    109. la1 ->resize(430,140);
    110. la1->setPixmap(QString("E:\\c\\qt1\\222.png"));
    111. //设置 内容自适应
    112. la1->setScaledContents(true);
    113. connect(this->bt1,&QPushButton::clicked,this,&Window::bt1_clicked);
    114. //
    115. connect(this,&Window::my_signal,[&](){
    116. this->close();
    117. });
    118. //使用qt4连接,
    119. connect(bt2,SIGNAL(clicked()),this,SLOT(close()));
    120. }
    121. Window::~Window()
    122. {
    123. }
    124. //补充的注册
    125. void Window::bt6_clicked()
    126. {
    127. int name_1 = this->ed2->text().toInt();
    128. QString pass_1 = this->ed1->text();
    129. if(name_1 == 0 ||pass_1.isEmpty())
    130. {
    131. QMessageBox::information(this,"提示","请将数据填写正确");
    132. return ;
    133. }
    134. QSqlQuery querry;
    135. //准备sql语句
    136. QString sql2 = QString("select * from my where name = '%1'").arg(name_1);
    137. if(!querry.exec(sql2))
    138. {
    139. QMessageBox::information(this,"提示","注册失败");
    140. return ;
    141. }
    142. else
    143. {
    144. QString sql = QString("insert into my(name,pass)"
    145. "values('%1', '%2')").arg(name_1).arg(pass_1);
    146. if(!querry.exec(sql))
    147. {
    148. QMessageBox::information(this,"提示","注册失败");
    149. return ;
    150. }
    151. QMessageBox::information(this,"提示","注册成功");
    152. }
    153. }
    154. void Window::bt1_clicked()
    155. {
    156. QMessageBox box(QMessageBox::Critical,
    157. "错误","密码错误",QMessageBox::Yes|QMessageBox::No,
    158. this);
    159. QMessageBox box2(QMessageBox::Critical,
    160. "错误","账号错误",QMessageBox::Yes|QMessageBox::No,
    161. this);
    162. QMessageBox box3(QMessageBox::Information,
    163. "信息","登录成功",QMessageBox::Ok|QMessageBox::Cancel,
    164. this);
    165. int name_1 = this->ed2->text().toInt();
    166. QString pass_1 = this->ed1->text();
    167. if(name_1 == 0 ||pass_1.isEmpty())
    168. {
    169. QMessageBox::information(this,"提示","请将数据填写正确");
    170. return ;
    171. }
    172. QSqlQuery querry;
    173. QString sql = QString("select * from my where name = '%1' and pass = '%2'").arg(name_1).arg(pass_1);
    174. if(querry.exec(sql))
    175. {
    176. if(querry.next())
    177. {
    178. qDebug()<<"登录成功";
    179. int rew =box3.exec();
    180. if(rew ==QMessageBox::Ok)
    181. {
    182. emit jump();
    183. emit my_signal();
    184. }
    185. else {
    186. int ret =QMessageBox::question(this,
    187. "问题",
    188. "是否取消登录",
    189. QMessageBox::Yes|QMessageBox::No,
    190. QMessageBox::Yes);
    191. if(ret ==QMessageBox::Yes)
    192. {
    193. emit my_signal();
    194. }
    195. }
    196. }
    197. else{
    198. int ret =box.exec();
    199. if(ret ==QMessageBox::Yes)
    200. {
    201. Window::ed1->setText("");
    202. }
    203. else
    204. this->close();
    205. }
    206. }
    207. else
    208. {
    209. qDebug()<<"账号错误";
    210. int rex =box2.exec();
    211. if(rex ==QMessageBox::Yes)
    212. {
    213. Window::ed1->setText("");
    214. Window::ed2->setText("");
    215. }
    216. else
    217. this->close();
    218. }
    219. }

     查找:

    1. void Widget::on_serchBtn_clicked()
    2. {
    3. int numb_ui = ui->numbEdit->text().toInt();
    4. //准备sql语句
    5. QString sql = QString("select * from myTable where numb = '%1'").arg(numb_ui);
    6. //准备语句执行者
    7. QSqlQuery querry;
    8. //执行sql语句
    9. if(!querry.exec(sql))
    10. {
    11. QMessageBox::information(this,"失败","查询失败");
    12. return ;
    13. }
    14. int i = 0;
    15. while (querry.next()) {
    16. int k =1;
    17. // 将查询结果插入到QTableWidget中
    18. for (int j = 4; j < 8; j++) {
    19. ui->tableWidget->setItem(i,j-4,new QTableWidgetItem(querry.record().value(k).toString()));
    20. k++;
    21. }
    22. i++;
    23. }
    24. }

     

    网络聊天室,客户端

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. ui->disconbtn->setEnabled(false);
    9. //给客户端指针实例化空间
    10. socket = new QTcpSocket(this);
    11. //如果连接服务器成功,该客户端就会发射一个connected的信号
    12. //我们可以将该信号连接到自定义的槽函数中处理相关逻辑
    13. //由于该连接只需要连接一次,所以写在构造函数
    14. connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);
    15. //客户端与服务器连接成功后,如果服务器向客户端发来数据,那么该客户端就会自动发射一个readyRead信号
    16. //我们可以将该信号连接到自定义的槽函数中处理相关逻辑
    17. connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
    18. //当客户端与服务器断开连接后,该客户端就会自动发射一个disconnected的信号
    19. //我们可以将该信号与自定义的槽函数连接
    20. //由于只要连接一次,所以写在构造函数
    21. connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
    22. }
    23. Widget::~Widget()
    24. {
    25. delete ui;
    26. }
    27. void Widget::on_conbtn_clicked()
    28. {
    29. //获取ui界面的信息
    30. userName = ui->usernameLab->text(); //获取用户名
    31. QString hostName = ui->ipEdit->text(); //获取ip
    32. quint16 port = ui->portEdit->text().toUInt(); //获取port
    33. //调用函数链接到主机
    34. //参数1:服务器的主机地址
    35. //参数2:端口号
    36. socket->connectToHost(hostName,port);
    37. //如果连接服务器成功,该客户端就会发射一个connected的信号
    38. //我们可以将该信号连接到自定义的槽函数中处理相关逻辑
    39. //由于该连接只需要连接一次,所以写在构造函数
    40. ui->conbtn->setEnabled(false);
    41. ui->disconbtn->setEnabled(true);
    42. ui->usernameLab->setEnabled(false);
    43. ui->ipEdit->setEnabled(false);
    44. ui->portEdit->setEnabled(false);
    45. }
    46. //关于处理connected信号的槽函数的定义
    47. void Widget::connected_slot()
    48. {
    49. QMessageBox::information(this,"成功","连接服务器成功");
    50. //顺便向服务器发送一条消息xxx进入聊天室
    51. QString msg = userName +": 进入聊天室";
    52. socket->write(msg.toLocal8Bit());
    53. }
    54. //关于处理readyRead信号的槽函数的定义
    55. void Widget::readyRead_slot()
    56. {
    57. //读取该客户端中的数据
    58. QByteArray msg = socket->readAll();
    59. //将数据展示在ui界面
    60. ui->msglist->addItem(QString::fromLocal8Bit(msg));
    61. }
    62. //发送按钮对应的槽函数
    63. void Widget::on_sendbtn_clicked()
    64. {
    65. //获取ui界面编辑的文本内容
    66. QString m =ui->msgEdit->text();
    67. //整合发送的信息
    68. QString msg =userName+":"+m;
    69. //将消息发送给服务器
    70. socket->write(msg.toLocal8Bit());
    71. //将消息编辑器中的内容清空
    72. ui->msgEdit->clear();
    73. }
    74. //断开服务器按钮对应的槽函数
    75. void Widget::on_disconbtn_clicked()
    76. {
    77. //准备要发送人的信息
    78. QString msg =userName+":离开聊天室";
    79. socket->write(msg.toLocal8Bit());
    80. //调用成员函数disconnectFromHost
    81. //功能:断开客户端与服务器的连接
    82. socket->disconnectFromHost();
    83. //当客户端与服务器断开连接后,该客户端就会自动发射一个disconnected的信号
    84. //我们可以将该信号与自定义的槽函数连接
    85. //由于只要连接一次,所以写在构造函数
    86. socket->write(msg.toLocal8Bit());
    87. ui->conbtn->setEnabled(true);
    88. ui->disconbtn->setEnabled(false);
    89. ui->usernameLab->setEnabled(true);
    90. ui->ipEdit->setEnabled(true);
    91. ui->portEdit->setEnabled(true);
    92. }
    93. //关于处理disconnected信号的槽函数的定义
    94. void Widget::disconnected_slot()
    95. {
    96. QMessageBox::information(this,"退出","退出服务器");
    97. //顺便向服务器发送一条消息xxx退出聊天室
    98. QString msg = userName +": 退出聊天室";
    99. }

  • 相关阅读:
    SSM框架基于JSP犬舍寄养系统的设计与实现
    MyBatis框架一二级缓存含代码演示
    csdn测开涨薪技术-Git原理及使用全套教程
    【JavaScript】Date对象(创建时间对象、常用Date方法总结)
    手把手教你深度学习和实战-----线性回归+梯度下降法
    java90-Character方法大小写转换
    十年架构五年生活-09 五年之约如期而至
    算法压测自己压测
    删除word文档中的空白页
    C语言——局部和全局变量
  • 原文地址:https://blog.csdn.net/zycyydssss/article/details/132677511