UPDATE

  at 2020/04/21 14:19

  心疼九字班

  at 2019/07/20 20:21

  更新了Qt连接mysql的方法,但是是自己仿照连VS的方法摸索出来的,简单测试了一下能work但是不保证后期不会出问题。如果你在尝试过程中出现了任何问题请务必告知我。

  

  at 2019/07/19 13:43

  如果你安装Qt的时候忘记安装相应的包,是可以补充安装的,参考:https://blog.csdn.net/lzp_k2/article/details/83178585

  自己测试了一下,会提示需要先更新,就先update之后再add or remove。整个过程中偶尔会提示辅助工具太老,这时貌似不管它就可以了(手动捂脸。

  这个部分我就不在正文里详细写了,有啥问题私戳我趴(企图勾搭

  

  

  at 2019/07/18 11:58

  考虑到用户密码的部分可能需要用到MD5(其实是因为想凑字数),文末补充了Openssl的安装方法。

  at 2019/07/18 11:58

  Qt中如果你希望双击exe能够直接打开并正常运行程序,需要在环境变量PATH中加入msvc2017_64\bin(具体见下)。

  添加了Qt完成配置后测试用代码的来源。

  at 2019/07/17 11:10

  后面正式开发的时候需要整合Qt和MySQL,建议直接在VS中新建Qt项目,它会帮你配置好Qt相关的内容,然后再手动配置MySQL的库。


  众所周知,我们的c++小学期大作业是实现一个众包平台,要求体现面向对象,有图像界面(虽然说可以没有但是肯定分不高啊),有数据库(虽然说可以用文件系统但是肯定分不高啊)。这么大一个工程要我们三周时间内做出来实在是非常难以想象……于是萌生了趁早开始搞,把做大作业的过程中踩过的坑分享给大家,顺便收割一波访问量给完全没思路的同学一点前进的方向的想法。我不会公开自己的核心代码,原则上也不会阐述具体细节,只谈大的轮廓,或者大家应该自学的方向(不然我怕被老师查水表可能剥夺了同学们的学习机会)。

  我自己的思路是VS2017+Qt+MySQL,如果你完全不知道怎么搞可以按照我的来,大佬们有自己的思路我就当作是提供一点借鉴吧。

  

  今日份是Part 1,关于如何配置相关环境,还有一些前置知识的学习,因为是零碎的环境配置所以会比较细节一点,以后不会了。与其说是攻略更多是把网上的资料汇总起来……

  先放一个链接,里面是需要下载的一些软件安装包:https://cloud.tsinghua.edu.cn/d/059ef6b1f9a149ce879b/

  用的是清华云盘,不烧流量,反正估计也没办法服务外校同学。

1. VS2017

  选择VS2017是因为自己电脑已经装好了,而且用起来也比2012舒服一些,有自动调代码风格的功能(对范老师代码风格要求宝具?)。如果你用的是其他版本应该也可以照常进行,不过不能保证就是了。云盘里已经放了一个vs_2017_installer.zip,这个安装起来应该没有难度,有啥问题可以私戳我鸭。

2. Qt

  我也是一个头一次接触Qt的小白,所以就以一个小白的视角来安装了。

  参考链接:https://blog.csdn.net/qq_38906523/article/details/76503551

  官方下载链接:https://download.qt.io/archive/qt

  

  我用的是qt-opensource-windows-x86-5.13.0.exe,同样在云盘里有。

  安装包打开之后一路next、skip就行了(但我还是注册了个账号登上了,好像不搞也没事)

  

  安装部分,MinGW和MSVC 2017是两个编译器,建议都装上有问题可以换,如果想在VS里面写代码MSVC就必装,其他东西不太了解大致勾了一些有可能需要用到的,反正多装点东西总好过回头出错。安装的过程比较漫长,这段时间你可以用来先装一下MySQL。

  安装完成我们先不急连接VS,作为一个小白还是先用自带IDE了解一下Qt的一些基础比较好。

  参考教程(Manual什么的对咱小白来说太高级了啦):

    http://c.biancheng.net/qt/

    http://www.kuqin.com/qtdocument/tutorial.html

  后一个教程似乎用的版本比较老,直接把代码拿下来不一定跑得动,不过它的解释还是很清楚的,用来了解一下Qt的大致工作方式还是挺好的。

  IDE的具体使用第一份教材已经说得很详细了,稍微说一下咱的理解。

  Qt似乎可以分为纯代码编辑和Qt Designer协助开发两种方式。打开UI文件的话会发现它的编码跟HTML代码很像(不知道HTML是啥也没关系,因为很像也没什么用)。

  纯代码编辑的话就相当于将Qt的库加载进程序里面,然后我们需要在cpp文件中创建各种各样的小零件,设计好它们的大小、位置和其他样式,确定父子元素关系,堆砌在屏幕上,这部分可以直接参考第二个教程。

  UI的话就是图形化设计了。对于在窗口上触发的点击、键盘按钮按下之类的事件则是通过信号与槽机制实现的。另外Qt中还有qss这样一个美化样式的文件,不过暂时可以不管它,后面觉得界面丑再慢慢加上好了。总体来说跟Web开发还是挺像的。

  

  然后来看一下如何在VS2017中使用Qt

  在VS中找到工具->扩展和更新->联机,搜索Qt然后安装它的一个辅助工具。

     

  这时需要退出VS重启,VS会提示安装Qt的辅助工具,再次打开VS看到一个Qt VS Tools,选择其下拉菜单中的Qt Options,将之前安装的Qt的安装路径Add进去

  

  这个时候就已经配置完成了,我们可以在VS中新建Qt的项目或者直接在代码中加载Qt的库进行操作。

  

  该部分代码来自:https://blog.csdn.net/xuexiaokkk/article/details/53487278直接新建项目然后贴进main.cpp里面就可以了

  虽然这个图像界面简陋而且十分复古但还是让人看到了完成大作业的希望!

  

  如果你希望打开exe文件能直接运行程序,还需要配置一下环境变量。最简单的方法是win+Q在搜索框中直接输入“环境变量”,在用户和系统环境变量中都可以找到一个叫PATH的,随便哪个都可以,在其中加入Qt的msvc2017_64\bin即可。搞定之后双击exe即可弹出程序感觉就跟真的在做开发一样^_^。

  如果设置完环境变量发现不行,也可以直接从MySQL那里拿libeay32.dll, libmysql.dll, ssleay32.dll放到exe同目录下。

  

3. MySQL

  不知道选择MySQL算不算比较low的选择,但由于博主有过使用MySQL的Web开发经验所以选择了这个东西,对于此次大作业我们应该只需要学会连接数据库,新建数据表,在数据表中插入or删除数据以及查询数据即可,都可以用相对简单的语句实现。

  参考资料:https://blog.csdn.net/qq_35987486/article/details/84066304

  SQL教程:http://www.w3school.com.cn/sql/index.asp

  先从安装开始,云盘中提供了mysql-installer-community-8.0.13.0.msi, 打开后同样是一路next和execute就行。中途如果提示你没有安装VS和Python3.7无法进行连接的话其实不用管它(我明明安装了python3.7啊可它就是没检测出来),不过我还是在云盘中提供了python3.7的安装包。

  

  到这个地方的话需要输入数据库的密码,默认用户名是root,密码得记好(还用你说)

  

  这里是输入数据库的服务名,最好写个能记住的名字,我一开始还以为是数据库名就写了个translation......

  

  

  成功打开后会是下面这个界面,至于自动打开的shell先不管它,那个太高级了。

  

  点这个加号新建连接,双击连接输密码进入数据库,然后我们可能需要先来新建一个给众包平台用的数据库。

  

  建完数据库可以在右下角看到它,展开之后就可以做新建数据表之类的操作

  

  后面肯定是需要建很多张表的,作为测试我们先来新建一张记录用户的表,随便起个名字之后点右边的奇怪箭头就可以开始设计这张表的结构了。

  

  MySQL的数据表跟Excel差不多,由行和列组成,每一列代表一种信息,每一行代表一个数据(这里每一行就是一个用户),

  大致设计一下这个表需要的数据,有用户的id,Nickname(这里我打算用Nickname作为登录的唯一标识),其他个人信息、语言资质证明、积分等。需要提一下这些数据的类型,VARCHAR表示是字符串,INT和TINYINT都是表示整数,后面的数字是显示宽度,反正大概这么写就行了,具体的暂时不用理解太多。勾选的东西PK表示这个元素是这张表的主键,也就是主要的脉络。NN是Not Null,不能是空的。UQ表示不能重复。AI表示这个元素会自增,就是塞数据的时候不给它数据它就自己++。Default是默认值,这里将score设置为默认0。其他的可以参考给的资料,说得很详细了。

  

   

  做好确认之后它会给你反馈一下原始的SQL语句。我们刚刚做的设计都是在UI上进行的,之后实际操作还是应该尽可能用SQL语句来实现,我们需要用到的SQL语法也并不多,可以在W3school上看,其实用到不会写再查就行,非常简单。

  

  数据表建完就可以做插入、查询之类的操作,根据查到的语法我们可以七七八八地拼凑出下面这样的语句,就是插入一行数据,查询而已。

  具体来说,我们可以查到查询的语句是“SELECT 列名称 FROM 表名称”,插入的语句是“INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)”,然后照猫画虎就可以实现基本的需求了。

  

  这样一来我们就大概了解了SQL的语法,可以开始考虑连接VS和MySQL了。

  如果你是按照我所说的方法安装,大概率是装上了64位的MySQL(不知道为啥没有弹出来让我选32位还是64位)。在VS中新建一个空项目,把参考资料中大佬给出来的代码贴上去,改一改然后咱们来看看能不能跑。观察这份代码,可以发现我们需要先写好连接MySQL的相关设置,然后使用mysql.h中给的函数直接进行连接,查询等操作。如果你希望自己的代码鲁棒性好一些还可以加入出错时的提示。

  下面是测试用代码

#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>
#include<mysql.h>
#pragma comment(lib, "libmysql.lib")
int main(void)
{
MYSQL mysql, *sock; //声明MySQL的句柄
const char * host = "127.0.0.1"; //因为是作为本机测试,所以填写的是本地IP
const char * user = "root"; //这里改为你的用户名,即连接MySQL的用户名
const char * passwd = "Z001221z"; //这里改为你的用户密码
const char * db = "student"; //这里改为你要连接的数据库的名字,一个数据可能有几张表
unsigned int port = ; //这是MySQL的服务器的端口,如果你没有修改过的话就是3306。
const char * unix_socket = NULL; //unix_socket这是unix下的,我在Windows下,所以就把它设置为NULL
unsigned long client_flag = ; //这个参数一般为0 const char * i_query = "select * from srt"; //查询语句,从那个表中查询,这里后面没有; MYSQL_RES * result; //保存结果集的
MYSQL_ROW row; //代表的是结果集中的一行
//my_ulonglong row; mysql_init(&mysql); //连接之前必须使用这个函数来初始化
if ((sock = mysql_real_connect(&mysql, host, user, passwd, db, port, unix_socket, client_flag)) == NULL) //连接MySQL
{
printf("fail to connect mysql \n");
fprintf(stderr, " %s\n", mysql_error(&mysql));
exit();
}
else
{
fprintf(stderr, "connect ok!!\n");
} if (mysql_query(&mysql, i_query) != ) //如果连接成功,则开始查询 .成功返回0
{
fprintf(stderr, "fail to query!\n");
exit();
}
else
{
if ((result = mysql_store_result(&mysql)) == NULL) //保存查询的结果
{
fprintf(stderr, "fail to store result!\n");
exit();
}
else
{
while ((row = mysql_fetch_row(result)) != NULL) //读取结果集中的数据,返回的是下一行。因为保存结果集时,当前的游标在第一行【之前】
{
printf("id is %s\t", row[]); //打印当前行的第一列的数据
printf("name is %s\t\n", row[]); //打印当前行的第二列的数据
printf("sex is %s\t\n", row[]);
//row = mysql_num_row(result);
//printf("%lu\n", mysql_num_row(result));
}
} }
mysql_free_result(result); //释放结果集
mysql_close(sock); //关闭连接
system("pause");
exit(EXIT_SUCCESS); }
---------------------
作者:ZHAOMANGANG
来源:CSDN
原文:https://blog.csdn.net/qq_35987486/article/details/84066304
版权声明:本文为博主原创文章,转载请附上博文链接!

  需要配置的东西如下:

  将VS的编译选项改为Debug、x64。

  然后在项目->属性->c++->常规->附加包含目录中加上MySQL的include目录,在链接器->常规->附加库目录中加上lib目录,偷懒起见我两个都写上了C:\Program Files\MySQL\MySQL Server 8.0\include;C:\Program Files\MySQL\MySQL Server 8.0\lib,需要根据自己安装MySQL的位置进行修改。

  还需要在链接器->输入->附加依赖项中加入libmysql.lib,不过这句话跟代码里的#pragma comment(lib, "libmysql.lib")是一样的。

  

  

  

  

  走到这里已经可以编译了,但是运行会提示缺少libmysql.dll,挣扎了很久发现,将MySQL Server 8.0\bin下的libeay32.dll和MySQL Server 8.0\lib下的libmysql.dll一起放在文件目录中的Debug文件夹下(有exe在的那个debug)就可以正常运行了。或者这一步也可以直接通过把bin和lib文件夹的路径加入PATH环境变量来解决,方法在Qt中已经演示过了。

  

  

4. 整合

  大概写一个程序让它能同时使用Qt和MySQL,这样前置工作就完成了。建议是先在VS中打开Qt项目,然后再手动配置MySQL。

  把上面写过的两行代码拼起来他就work了^_^

  

5. OpenSSL

  因为有可能在处理用户密码的时候使用到就写在这了。

  云盘中已经上传OpenSSL的安装包。解压后把include目录和lib目录像装MySQL的时候一样加进项目属性里即可,链接器->输入 里需要加入libssl.lib;libcrypto.lib;

  

  

  

6. Qt连MySQL

  自己仿照连VS的方法摸索出来的,没有用Qt自己的Sql驱动,简单测试了一下能work但是不保证后期不会出问题。

  由于MySQL默认设置的路径有空格,我们需要换个路径。将MySQL的MySQL Server 8.0目录copy出来,同时起一个没有空格的名字。

  新建一个工程,在.pro文件末尾加上这段东西:  

INCLUDEPATH += "C:\tmp\MYSQL\include"
LIBS += "C:\tmp\MYSQL\lib\libmysql.lib"

  具体include和libmysql.lib需要修改为你自己的路径,但是注意不要包含空格,最好也别有中文吧。

  测试用到的代码,直接贴进main.cpp就可以了:

#include "mainwindow.h"
#include <QApplication>
#include <mysql.h>
#include <cstdio>
#include <qpushbutton>
#include<qfont>
#include <QVBoxLayout> char S[];
int main(int argc, char *argv[])
{
MYSQL mysql, *sock; //声明MySQL的句柄
const char * host = "127.0.0.1"; //因为是作为本机测试,所以填写的是本地IP
const char * user = "root"; //这里改为你的用户名,即连接MySQL的用户名
const char * passwd = "*****"; //这里改为你的用户密码
const char * db = "translation"; //这里改为你要连接的数据库的名字,一个数据可能有几张表
unsigned int port = ; //这是MySQL的服务器的端口,如果你没有修改过的话就是3306。
const char * unix_socket = nullptr; //unix_socket这是unix下的,我在Windows下,所以就把它设置为NULL
unsigned long client_flag = ; //这个参数一般为0 const char * i_query = "select ID, Nickname, score from users"; //查询语句,从那个表中查询,这里后面没有; MYSQL_RES * result; //保存结果集的
MYSQL_ROW row; //代表的是结果集中的一行
//my_ulonglong row;
mysql_init(&mysql); //连接之前必须使用这个函数来初始化
if ((sock = mysql_real_connect(&mysql, host, user, passwd, db, port, unix_socket, client_flag)) == nullptr) //连接MySQL
{
printf("fail to connect mysql \n");
fprintf(stderr, " %s\n", mysql_error(&mysql));
exit();
}
else
{
fprintf(stderr, "connect ok!!\n");
} if (mysql_query(&mysql, i_query) != ) //如果连接成功,则开始查询 .成功返回0
{
fprintf(stderr, "fail to query!\n");
exit();
}
else
{
if ((result = mysql_store_result(&mysql)) == NULL) //保存查询的结果
{
fprintf(stderr, "fail to store result!\n");
exit();
}
else
{
while ((row = mysql_fetch_row(result)) != NULL) //读取结果集中的数据,返回的是下一行。因为保存结果集时,当前的游标在第一行【之前】
{
printf("ID is %s\n", row[]); //打印当前行的第一列的数据
printf("Nickname is %s\n", row[]); //打印当前行的第二列的数据
printf("score is %s\n", row[]);
sprintf_s(S, "==%s==", row[]); //row = mysql_num_row(result);
//printf("%lu\n", mysql_num_row(result));
}
} }
QApplication a(argc, argv);
QWidget window;
window.resize(,);
QVBoxLayout layout;
QPushButton quit(S,&window);
quit.setFont(QFont("Times",,QFont::Bold));
QObject::connect(&quit,SIGNAL(clicked()),&a,SLOT(quit()));
layout.addWidget(&quit);
window.setLayout(&layout);
window.show();
return a.exec();
}

  当然账号密码,查询语句需要改改,我自己是user的数据表里有一个Nickname为swm_sxt,ID为1的数据。

  这里先编译一下,会显示程序异常退出,然后把bin下的libeay32.dll和lib目录下libmysql.dll拷贝到刚刚生成的一个奇怪名字文件夹(应该是跟项目文件夹同目录)下的Debug目录(总之跟你提示程序异常退出的时候显示的exe在同个目录下)

  再运行,就成功了。

  

  仅供参考,我瞎弄出来的,不保证正确性,但既然简单的查询语句能成功对于大作业来说应该是可以满足需求了?

  完结撒花!明天开始正式码代码!

  

c++小学期大作业攻略(一)环境配置的更多相关文章

  1. c++小学期大作业攻略(二)整体思路+主界面

    写在前面:如果我曾经说过要在第一周之内写完大作业,那……肯定是你听错了.不过如果我在写的时候有攻略看的话应该可以轻松地在4~5天内做完,然后觉得写攻略的人是个小天使吧(疯狂暗示).出于给大家自由发挥的 ...

  2. c++小学期大作业攻略(五)基于QSS的样式美化

    这回真的是最后一篇了. 前面说过,我们开发过程中暂时不搭理样式问题,等最后再一起处理,那么现在就是最后处理时刻了!看到网上说QSS跟CSS差不多,我还觉得自己可以干回老本行了,结果用起来发现,QSS是 ...

  3. c++小学期大作业攻略(三)用户系统

    Update at 2019/07/22 14:16 发现一个大坑,我们后期是打算用QSS统一堆样式进行美化的,于是我把之前对QLabel进行的setAlignment全部去掉了,打算统一丢进Qss里 ...

  4. c++小学期大作业攻略(零)建议+代码结构(持续更新)

    当前已经做好的exe,数据库是连服务器的,但是头像是存在本地的文件系统里面: https://cloud.tsinghua.edu.cn/d/059ef6b1f9a149ce879b/files/?p ...

  5. c++小学期大作业攻略(四)任务系统+站内信

    虽然比最早的预定晚了整整一个星期但这核心功能最后一篇终于还是来了. 如果你已经经历了用户系统的洗礼,相信代码实现应该已经没有太大的难度,所以我们重点关注一下设计好的流程. 一.任务系统 首先是新建任务 ...

  6. TI Davinci DM6446开发攻略——开发环境搭建

    TI DAVINCI DM6446的开发环境搭建不像三星S3C2410,S3C2440,ATMEL的AT91SAM9260之类的单核ARM那么简单,因为DM6446还有DSP端的开发环境,以及双核之间 ...

  7. nodejs攻略——第一章 配置

    nodejs这玩意吧,我也是心血来潮的学习,所以啊.看这篇文章之前请大家有以下技能,如果没有..我不确定你能看得懂,毕竟我文采水平实在有限. 前置技能要求: c#或java 熟练+ JavaScrip ...

  8. 内连接、左外连接、右外连接、全外连接、交叉连接(CROSS JOIN)-----小知识解决大数据攻略

    早就听说了内连接与外连接,以前视图中使用过.这次自考也学习了,只是简单理解,现在深入探究学习(由于上篇博客的出现)与实践: 概念 关键字: 左右连接 数据表的连接有: 1.内连接(自然连接): 只有两 ...

  9. [国嵌攻略][048][MMU配置与使用]

    MMU配置与使用 1.通过点亮LED使用虚拟地址来使用MMU,采用段页映射方式 2.任务步骤:1.建立一级页表 2.写入TTB 3.打开MMU 代码编写 1.虚拟地址的段地址0xA0000000,一级 ...

随机推荐

  1. echarts白色实心环形图(空心饼图)的编写

    // 数据接入机构统计let myDom = document.getElementById('myChart');let myWidth = myDom.offsetWidth - 5; // 获取 ...

  2. i春秋暑期训练营丨渗透测试工程师开课啦

    每个人的夏天 都有专属的解锁方式 或来一次难忘的旅行 或躺在家里吹着空调吃西瓜 又或者是和小伙伴参加暑期训练营 i春秋暑期渗透测试工程师 报名通道已全部开启 为了保证课程质量,采取小班教学,每班仅限3 ...

  3. elasticsearch 入门篇

    前言: 要论入门最好的文档,非elasticsearch权威指南和官方的开发文档莫属,我只是基于这两份文档,记录一些关键知识点和自己的理解. 我们为什么要用elasticsearch,或者说来解决什么 ...

  4. django urls 配置小记

    django urls 配置小记 首先应了解 django2.0在url的配置上较之以前的版本有点区别,在之前的版本是通过django.conf.urls.url函数来实现路径配置的 urlpatte ...

  5. Docker 网络简单说明

    docker0 网络模型小结 Docker Daemon 会创建出一个名为 docker0 的虚拟网桥 ,用来连接宿主机与容器,或者连接不同的容器. veth pair 是用于不同network na ...

  6. 【分布式搜索引擎】Elasticsearch之安装Elasticsearch可视化平台Kibana

    一.Kibana简单介绍 Kibana 是为 Elasticsearch设计的开源分析和可视化平台.你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互.你 ...

  7. hexo笔记

    目录 hexo 常用指令 站内文章跳转 hexo安装 NexT主题 默认主题 评论插件-gitalk 修改内容区宽度 添加文章阴影 文章摘要设置 一篇文章多个 categories hexo的一些配置 ...

  8. 3-14 Pandas绘图

      1.魔法指令:%matplotlib inline :数据画图 In [1]: %matplotlib inline import pandas as pd In [2]: import nump ...

  9. JS高阶---继承模式(借用构造函数继承+组合继承)

    (1)借用构造函数继承 案例如下: 验证: (2)组合继承 案例如下: 验证如下: 结果如右图所示 . .

  10. python hash 哈希值

    自增知识点 1,哈希 什么是可哈希(hashable)? 简要的说可哈希的数据类型,即不可变的数据结构(字符串str.元组tuple.对象集objects). 哈希有啥作用? 它是一个将大体量数据转化 ...