Windows下 C++ Qt 安装与使用

Windows下 C++ Qt 安装,以及qt+mysql简单示例

环境配置

vs 2019

mysql server 8.0

下载

下载科大镜像Qt 5.9.0

安装

跳过注册

在这里插入图片描述

安装路径

在这里插入图片描述

安装路径不能带空格、中文字符或者其它任何特殊字符。

选择组件

在这里插入图片描述

使用

Qt designer设计UI

designer的好处是可以拖拽设计UI,十分便捷,并且可以自动导出.h文件。

在 安装目录\5.9\mingw53_32\bin 下找到designer.exe,打开。

在这里插入图片描述

在这里插入图片描述

Qt designer 使用教程

.ui转换为.h

uic *.ui -o *.h

Visual Studio项目使用Qt

在扩展/管理扩展下载Qt Visual Studio Tools

在这里插入图片描述

关闭所有VS窗口进行下载

重启电脑生效

打开扩展/qt vs tools/qt versions 添加qt compiler。路径是 qt安装目录\5.9\msvc2017_64\bin\qmake

在这里插入图片描述

创建新项目,搜索qt,选择qt widgets Application

在这里插入图片描述

将之前.ui生成的.h复制到项目中

vs连接mysql

在项目属性\c/c++\常规中,添加附加包含目录: mysql安装目录\MySQL Server 8.0\include

在项目属性\链接器\常规中,添加附加包含目录: mysql安装目录\MySQL Server 8.0\lib

在项目属性\链接器\输入中,添加libmysql.lib

mysql安装目录\MySQL Server 8.0\lib中的libmysql.dll复制到 项目main.cpp所在目录中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一个示例

登陆数据库,成功则显示登录成功,失败则提升原因

在这里插入图片描述

效果图

在这里插入图片描述
在这里插入图片描述

源文件

Database.h

#pragma once

#include <iostream>
#include <mysql.h>
//#include "C:\Program Files\MySQL\MySQL Server 8.0\include\mysql.h"

using std::cout;
using std::endl;

// 主要接口

// MYSQL //句柄
// MYSQL * mysql_init(MYSQL *mysql);    //初始化一个MYSQL连接的实例对象,如果mysql不为空,返回该对象地址。
// void mysql_close(MYSQL *sock);    //释放一个MYSQL连接实例

// MYSQL *mysql_real_connect (
// MYSQL *mysql,
// const char *host,
// const char *user, 
// const char *passwd, 
// const char *db, 
// unsigned int port,
// const char *unix_socket,
// unsigned long client_flag);   // 连接请求

// int mysql_query(MYSQL *mysql, const char *stmt_str); //命令执行 返回1失败, 返回0成功
// MYSQL_RES *mysql_store_result(MYSQL *mysql); //储存结果集
// MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); //检索一个结果集合的下一行。当在mysql_store_result()之后使用时,如果没有更多的行可检索时,mysql_fetch_row()返回NULL。
// unsigned int mysql_num_fields(MYSQL_RES *result);  //函数返回结果集中字段的数。
// void mysql_free_result(MYSQL_RES *result);   //释放结果集内存。
// const char* mysql_error(MYSQL* mysql); //返回上一个 MySQL 操作产生的文本错误信息。



class Database {
public:
	Database() : _res(nullptr) {
		_mysql = new MYSQL;
		if (mysql_init(_mysql) == nullptr) {
			cout << "初始化失败" << endl;
			exit(0);
		}
	}
	~Database() {
		if (_mysql != nullptr) {
			mysql_close(_mysql);
			delete _mysql;
		}
		if (_res != nullptr) {
			mysql_free_result(_res);
		}
		
	}
	//连接数据库 参数为host 用户名 密码 数据库名 端口
	bool Connect(const char* host, const char* user, const char* passwd, const char* db, const int port);

	//执行命令
	bool Query(const char* stmt_str);

	//MYSQL_ROW 等价于char** 
	//返回结果的一行,知道返回nullptr
	MYSQL_ROW GetRow();

	//返回上一个 MySQL 操作产生的文本错误信息。
	const char* GetError() {
		return mysql_error(_mysql);
	}

	unsigned int GetFieldCount() {
		return _res == nullptr ? (unsigned int)0 : mysql_num_fields(_res);
	};




private:
	MYSQL* _mysql;//mysql连接
	MYSQL_RES* _res; //执行结果  
};

bool Database::Connect(const char* host, const char* user, const char* passwd, const char* db, const int port = 3306) {
	if (mysql_real_connect(_mysql, host, user, passwd, db, port, nullptr, 0) == nullptr) {
		cout << "连接数据库" << db << "失败" << endl;
		cout << GetError() << endl;
		return false;
	}
	else {
		cout << "连接数据库" << db << "成功" << endl;
		return true;
	}
}

bool Database::Query(const char* stmt_str) {
	if (mysql_query(_mysql, stmt_str) != 0) {
		cout << stmt_str << "执行失败" << endl;
		return false;
	}
	else {
		_res = mysql_store_result(_mysql);
		return true;
	}
}

MYSQL_ROW Database::GetRow() {
	return _res == nullptr ? nullptr : mysql_fetch_row(_res);
}

UILogin.h

#pragma once
/********************************************************************************
** Form generated from reading UI file 'login.ui'
**
** Created by: Qt User Interface Compiler version 5.13.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/


#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>

QT_BEGIN_NAMESPACE


class Ui_LoginDialog
{
public:
    QGridLayout* gridLayout;
    QLabel* label;
    QLineEdit* ipaddr;
    QLabel* label_2;
    QLineEdit* database;
    QLabel* label_3;
    QLineEdit* username;
    QLabel* label_4;
    QLineEdit* password;
    QPushButton* LoginBtn;

    void setupUi(QDialog* LoginDialog)
    {
        if (LoginDialog->objectName().isEmpty())
            LoginDialog->setObjectName(QString::fromUtf8("LoginDialog"));
        LoginDialog->resize(400, 240);
        QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        sizePolicy.setHorizontalStretch(0);
        sizePolicy.setVerticalStretch(0);
        sizePolicy.setHeightForWidth(LoginDialog->sizePolicy().hasHeightForWidth());
        LoginDialog->setSizePolicy(sizePolicy);
        LoginDialog->setMaximumSize(QSize(400, 240));
        gridLayout = new QGridLayout(LoginDialog);
        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
        label = new QLabel(LoginDialog);
        label->setObjectName(QString::fromUtf8("label"));
        QFont font;
        font.setPointSize(12);
        label->setFont(font);

        gridLayout->addWidget(label, 0, 0, 1, 1);

        ipaddr = new QLineEdit(LoginDialog);
        ipaddr->setObjectName(QString::fromUtf8("ipaddr"));
        ipaddr->setFont(font);

        gridLayout->addWidget(ipaddr, 0, 1, 1, 1);

        label_2 = new QLabel(LoginDialog);
        label_2->setObjectName(QString::fromUtf8("label_2"));
        label_2->setFont(font);

        gridLayout->addWidget(label_2, 1, 0, 1, 1);

        database = new QLineEdit(LoginDialog);
        database->setObjectName(QString::fromUtf8("database"));
        database->setFont(font);

        gridLayout->addWidget(database, 1, 1, 1, 1);

        label_3 = new QLabel(LoginDialog);
        label_3->setObjectName(QString::fromUtf8("label_3"));
        label_3->setFont(font);

        gridLayout->addWidget(label_3, 2, 0, 1, 1);

        username = new QLineEdit(LoginDialog);
        username->setObjectName(QString::fromUtf8("username"));
        username->setFont(font);

        gridLayout->addWidget(username, 2, 1, 1, 1);

        label_4 = new QLabel(LoginDialog);
        label_4->setObjectName(QString::fromUtf8("label_4"));
        label_4->setFont(font);

        gridLayout->addWidget(label_4, 3, 0, 1, 1);

        password = new QLineEdit(LoginDialog);
        password->setObjectName(QString::fromUtf8("password"));
        password->setEchoMode(QLineEdit::Password);
        password->setFont(font);

        gridLayout->addWidget(password, 3, 1, 1, 1);

        LoginBtn = new QPushButton(LoginDialog);
        LoginBtn->setObjectName(QString::fromUtf8("LoginBtn"));
        LoginBtn->setFont(font);
        LoginBtn->setAutoFillBackground(true);

        gridLayout->addWidget(LoginBtn, 4, 1, 1, 1);


        retranslateUi(LoginDialog);

        QMetaObject::connectSlotsByName(LoginDialog);
    } // setupUi

    void retranslateUi(QDialog* LoginDialog)
    {
        LoginDialog->setWindowTitle(QCoreApplication::translate("LoginDialog", "LOGIN IN", nullptr));
        label->setText(QCoreApplication::translate("LoginDialog", "Server Address:", nullptr));
        label_2->setText(QCoreApplication::translate("LoginDialog", "Database Name:", nullptr));
        label_3->setText(QCoreApplication::translate("LoginDialog", "Username\357\274\232", nullptr));
        label_4->setText(QCoreApplication::translate("LoginDialog", "Password\357\274\232", nullptr));
        LoginBtn->setText(QCoreApplication::translate("LoginDialog", "Login", nullptr));
    } // retranslateUi

};



QT_END_NAMESPACE



Login.h

#pragma once
#include <QtWidgets/QMessageBox>
#include "UILogin.h"
#include "Database.h"

class LoginDialog : public QDialog{
public:
    LoginDialog(QDialog* parent = nullptr) : QDialog(parent) {
        _ui = new Ui_LoginDialog;
        _ui->setupUi(this);
        QObject::connect(_ui->LoginBtn, &QPushButton::clicked, this, &LoginDialog::Login);
        this->show();
    }
    
    ~LoginDialog() {
        delete _ui;
    }

private slots:
    void Login() {
        Database* mysql = new Database;
        auto host = (_ui->ipaddr->text()).toStdString();
        auto db   = (_ui->database->text()).toStdString();
        auto user = (_ui->username->text()).toStdString();
        auto passwd = (_ui->password->text()).toStdString();
        if (mysql->Connect(host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), 3306)) {
            QMessageBox::information(this, "Title", "success");
        } else {
            QMessageBox::information(this, "Title", mysql->GetError());
        }
    }
private:
    Ui_LoginDialog* _ui;
};

main.cpp

#include "QtMysql.h"
#include "Login.h"
#include <QtWidgets/QApplication>


int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    LoginDialog w;
    a.exec();
    return 0;
}

) {
QMessageBox::information(this, “Title”, “success”);
} else {
QMessageBox::information(this, “Title”, mysql->GetError());
}
}
private:
Ui_LoginDialog* _ui;
};




main.cpp

```c++
#include "QtMysql.h"
#include "Login.h"
#include <QtWidgets/QApplication>


int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    LoginDialog w;
    a.exec();
    return 0;
}

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值