日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

qt mysql now()_Qt + mysql 運用 (項目一)

發(fā)布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt mysql now()_Qt + mysql 運用 (項目一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

自己整合了一些資料方便以后查看,另外參考了一些資料嘗試做了個學(xué)生管理系統(tǒng)

以下資料若有錯誤或有侵權(quán)的地方,請前輩們指正,謝謝!

在Qt項目中右鍵執(zhí)行qmake,之后在運(yùn)行。

另外一種方法是在MVS2013軟件中進(jìn)行編譯、調(diào)試。

Qt 中文亂碼問題

另外可用QString::fromLocal8Bit("中文")和QStringLiteral("中文")處理 (用起來有點(diǎn)繁瑣)

Qt 連接數(shù)據(jù)庫使用的命令

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

db.setHostName("localhost"); //127.0.0.1也是一樣的,屬於本地地址

db.setUserName("root"); //登陸MYSQL的用戶名

db.setPassword("xiaogao"); //你自己登陸的密碼

db.setDatabaseName("school"); //登陸數(shù)據(jù)庫的名稱

db.open(); //打開數(shù)據(jù)庫連接

Qt 連接mysql的問題:QMSQL driver not loaded

可參考以下教程安裝mysql:

找到mysql安裝目錄lib文件夾中的libmysql.dll,並復(fù)制到Qt ?msvc2013_64目錄中的bin文件里面。

Qt 無法打開包括文件:QsqlDatabase和QsqlDatabase問題

在.pro文件加 ? QT ? ? ?+= sql

Qt 執(zhí)行SQL語句

QSqlQuery query;

query.exec("show databases;"); //顯示數(shù)據(jù)庫列表

while(query.next()) //遍歷查詢到的數(shù)據(jù)庫列表

{

qDebug() << query.value(0).toString();

list << query.value(0).toString();

}

if(list.contains("school")) //可用來判斷數(shù)據(jù)庫是否存在

以下摘自:

http://blog.csdn.net/fzu_dianzi/article/details/6959268

query.exec(”sql語句“);?用於執(zhí)行sql語句,像select * from ”表格名稱“用於查詢表格所有的記錄,此時query是指向結(jié)果集以外的,因此需要使用以下命令指向。

query.value(int n); ??獲取第n個屬性的值也就是結(jié)果集的第n列的值,其中n是從0開始的。詳細(xì)可以查看以上連接。

query.seek(int n); ??指向結(jié)果集的第n條記錄。

query.first(); ? ? ? ? ??指向結(jié)果集第一條記錄。

query.last(); ? ? ? ? ? ?指向結(jié)果集最后一條記錄。

query.next(); ? ? ? ? ??指向結(jié)果集下一條記錄,在沒有其他指向記錄時,next()是從結(jié)果集第一條記錄開始的。

query.previous(); ? ??指向上一條記錄。

query.record(); ? ? ? ?獲取現(xiàn)在指向的記錄。

query.at(); ? ? ? ? ? ? ??獲取現(xiàn)在指向的記錄在結(jié)果集的編號。

query.prepare("update student set student_name = ? where student_id = ?"); //預(yù)處理

query.addBindValue("名字"); //對應(yīng)第一個問號

query.addBindValue("id"); //對應(yīng)第二個問號

常用sql指令:

創(chuàng)建表格:

create table user(id varchar(20) not null unique,password varchar(20) not null,phonenumble varchar(20) not null unique);

create table student (student_id varchar(20) not null unique,student_name varchar(20),student_sex enum('男','女'),student_age int(20),student_class varchar(20),constraint student_user_fk foreign key(student_id) references user(id) on delete cascade on update cascade);

創(chuàng)建數(shù)據(jù)庫:

create database school;

創(chuàng)建外鍵約束:(在創(chuàng)建student表格中設(shè)置的)

constraint student_user_fk foreign key(student_id) references user(id) on delete cascade on update cascade;

//同步更新和刪除,student表格中的id被user的id約束

constraint student_user_fk foreign key(student_id) references user(id);

//user表格中記錄的刪除和更新被student表格約束,同時student表格中的id被user的id約束

向表格插入、更新、刪除記錄:

insert into student set student_id = id,student_name = '名字',student_sex = '男',student_age = 3,student_class = '班級';

//向student表格的中插入新的id記錄

update student set student_name = '名字',student_sex = '男',student_age = 33,student_class = '班級' where student_id = id;

//更新該id處的記錄

delete from user where id = 'id'; //刪除該id處的記錄

創(chuàng)建觸發(fā)器:

delimiter |

create trigger user_image_in after insert on user for each row begin insert into image set image_id = new.id; end //插入后觸發(fā)

create trigger student_grade_up after update on student for each row begin update grade set grade_name = new.student_name,grade_class = new.student_class where grade_id = new.student_id;end //更新后觸發(fā)

create trigger student_grade_de after delete on student for each row begin delete grade set grade_name = new.student_name,grade_class = new.student_class where grade_id = new.student_id;end //刪除后觸發(fā)

| //作為delimiter | 的結(jié)束

查詢表格:

show databases; //顯示所有數(shù)據(jù)庫列表

select * from user ; //顯示user所有的記錄

select * from user where id = 1 ; // 顯示user表格中id 等於1的記錄

基本sql語句詳細(xì):

Qt 控件遍歷:

QObjectList list = children();

QLineEdit *b;

foreach (QObject *obj, list) {

b = qobject_cast(obj);

if(b){

b->setStyleSheet(QStringLiteral("background-color:rgb(255,255,255);"));

b->setEnabled(false);

}

QtQMessageBox:

QMessageBox::warning(this,"警告","該賬號已存在")

QMessageBox::warning(this,"警告","用戶名不能小於6位數(shù)");

QMessageBox::information(this,"狀態(tài)","注冊成功");

QtQProgressDialog:

QProgressDialog progress("正在初始化數(shù)據(jù)庫",false,0,10000,this); //進(jìn)度條窗口

progress.setWindowTitle("數(shù)據(jù)庫測試");

progress.move(600,300);

progress.show();

for(int i = 0;i < 30000; i++)

{

progress.setValue(i);

QCoreApplication::processEvents();

}

QtQFileDialog +QFile:

將文件存放在mysql表格中:

//創(chuàng)建表格image,該表格被user約束,當(dāng)user插入一條記錄時,image也插入相同id的記錄

query.exec("create table image (image_id varchar(20) not null unique,image_save longblob,constraint image_user_fk foreign key(image_id) references user(id) on delete cascade on update cascade);");

void maininterface::mousePressEvent(QMouseEvent *e)

{

if(e->x()<140&&e->y()<170)

{

qDebug() << "┗|`O′|┛ 嗷~~";

QSqlQuery query;

QString path;

query.prepare("update image set image_save = ? where image_id = ?");

path = QFileDialog::getOpenFileName(this,"打開文件",false,"*.jpg"); //獲取圖片路徑

qDebug() << path;

QByteArray data;

QFile* file = new QFile(path);

file->open(QIODevice::ReadOnly);

data = file->readAll(); //將文件讀入data中

file->close();

QVariant var(data);

query.addBindValue(var); //對應(yīng)第一個問號

query.addBindValue(id); //對應(yīng)第二個問號

query.exec();

}

讀取mysql中的圖片:

QPixmap pix;

str = QString("select * from image where image_id = %1;").arg("id"); //查找image該id的記錄

query.exec(str);

query.first();

str = query.value(1).toString();

if(!str.isEmpty()) //獲取表格中l(wèi)ongblob的數(shù)據(jù),也就是存儲圖片數(shù)據(jù)的那一列

{

qDebug() << query.value(0).toString();

pix.loadFromData(query.value(1).toByteArray(),"JPG");

ui->image->setPixmap(pix);

ui->image->setScaledContents(true); //可以將圖片在此窗口中完全顯示

}else {

qDebug() << "暫無圖片";

}

Qt ?顯示mysql結(jié)果集QSqlTableModel +QTableView

.h文件

QSqlTableModel *model = new QSqlTableModel(this);

QTableView *view = new QTableView(this);

.cpp文件

void classtable::show_table(QString listname,QString str)

{

model->setTable("要查詢的表格名稱");

model->setFilter(QObject::tr(" %1 = '%2'").arg(str).arg(listname)); //相當(dāng)於 where 表格的字段名 = listname

model->setHeaderData(0,Qt::Horizontal,"學(xué)號"); // 0代表結(jié)果集第1列

model->setHeaderData(1,Qt::Horizontal,"名字"); // 1代表結(jié)果集第2列

model->select();

view->setModel(model);

view->setEditTriggers(QAbstractItemView::NoEditTriggers); //禁止修改

view->resize(this->width(),this->height());

view->show();

}

Qt 多窗口的調(diào)用:

方法一:(用於一個父窗口和多個子窗口的處理,不知道怎么用於處理子窗口的子窗口的處理)

1、建立一個父窗口,然后建立一個QDialog類型的窗口作為子窗口

2、在父類窗口建立子窗口的對象

void 父類名::on_pushButton_clicked()

{

this->hide();

子類對象->show();

子類對象->exec(); //當(dāng)子類對象窗口關(guān)閉或隱藏時,執(zhí)行下面語句

this->show();

}

方法二:(使用connect,可用於父窗口與子窗口還有子窗口的子窗口間的調(diào)用,但用於一個父窗口和多個子窗口時,會使代碼質(zhì)量大大降低,復(fù)雜化)

建立一個父窗口,然后建立一個QDialog類型的窗口作為子窗口

父窗口.h文件

children_win *cwin = new children_win();

private slots:

void on_pushButton_clicked();

void re_show_pwin();

父窗口.cpp文件

parent_win::parent_win(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::parent_win)

{

ui->setupUi(this);

connect(cwin,SIGNAL(send_cwin()),this,SLOT(re_show_pwin())); //子類對象發(fā)送send_cwin()信號給父類,調(diào)用re_show_pwin()

}

void parent_win::on_pushButton_clicked()

{

this->hide();

cwin->show();

}

void parent_win::re_show_pwin()

{

this->show();

}

子窗口.h

signals:

void send_cwin();

子窗口.cpp

void children_win::on_pushButton_clicked()

{

this->hide();

emit send_cwin();

}

方法三:(比較好用)

建立一個父窗口,然后建立一個QDialog類的子窗口

父窗口.cpp

#include "zi.h"

void parent_win::on_pushButton_clicked()

{

this->hide();

zi *z = new zi(this); //this一定要加上,否則子窗口對象無法指向父類窗口

z->show();

}

子窗口.h

#include "fu.h"

fu *f;

子窗口.cpp

zi::zi(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::zi)

{

f = (fu*) parent; //fu指針指向父類窗口

ui->setupUi(this);

}

自己嘗試寫的程序:

總結(jié)

以上是生活随笔為你收集整理的qt mysql now()_Qt + mysql 運用 (項目一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。