1. .pro
QT + = core gui
QT + = sql
greaterThan ( QT_MAJOR_VERSION, 4 ) : QT + = widgets
CONFIG + = c++ 11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES + = QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES + = \
addrecord. cpp \
main. cpp \
mainwindow. cpp
HEADERS + = \
addrecord. h \
mainwindow. h
FORMS + = \
addrecord. ui \
mainwindow. ui
# Default rules for deployment.
qnx: target. path = / tmp/ $${ TARGET} / bin
else : unix: ! android: target. path = / opt/ $${ TARGET} / bin
! isEmpty ( target. path) : INSTALLS + = target
2. addrecord.h
#ifndef ADDRECORD_H
#define ADDRECORD_H
#include <QDialog>
namespace Ui {
class AddRecord ;
}
class AddRecord : public QDialog
{
Q_OBJECT
public :
explicit AddRecord ( QWidget * parent = nullptr ) ;
~ AddRecord ( ) ;
QString str[ 3 ] ;
bool isClicked = false ;
private slots:
void on_pushButton_clicked ( ) ;
private :
Ui:: AddRecord * ui;
} ;
#endif
3. main window.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qsqldatabase.h"
#include "qmessagebox.h"
#include "qsqlerror.h"
#include "qsqlquery.h"
#include "qsqltablemodel.h"
#include "qstringlist.h"
#include "qinputdialog.h"
#include "addrecord.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow ; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public :
MainWindow ( QWidget * parent = nullptr ) ;
~ MainWindow ( ) ;
private slots:
void on_pushButton_clicked ( ) ;
void on_pushButton_2_clicked ( ) ;
void on_tableView_doubleClicked ( const QModelIndex & index) ;
void on_lineEdit_textChanged ( const QString & arg1) ;
private :
Ui:: MainWindow * ui;
QSqlDatabase db;
} ;
#endif
4. add record.cpp
#include "addrecord.h"
#include "ui_addrecord.h"
AddRecord:: AddRecord ( QWidget * parent) :
QDialog ( parent) ,
ui ( new Ui:: AddRecord)
{
ui- > setupUi ( this ) ;
setWindowTitle ( "插入" ) ;
}
AddRecord:: ~ AddRecord ( )
{
delete ui;
}
void AddRecord:: on_pushButton_clicked ( )
{
isClicked = true ;
str[ 0 ] = ui- > lineEdit- > text ( ) ;
str[ 1 ] = ui- > lineEdit_2- > text ( ) ;
str[ 2 ] = ui- > lineEdit_3- > text ( ) ;
close ( ) ;
}
5. main window.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow:: MainWindow ( QWidget * parent)
: QMainWindow ( parent)
, ui ( new Ui:: MainWindow)
{
ui- > setupUi ( this ) ;
setWindowTitle ( tr ( "测试" ) ) ;
db = QSqlDatabase:: addDatabase ( "QSQLITE" ) ;
db. setDatabaseName ( "TEST" ) ;
if ( ! db. open ( ) )
{
QMessageBox:: warning ( this , "wrong" , db. lastError ( ) . text ( ) ) ;
return ;
}
QSqlQuery query;
query. exec ( "create table EXAMPLE("
"id integer primary key autoincrement,"
"name varchar,"
"age integer,"
"city varchar"
")" ) ;
QSqlTableModel * model = new QSqlTableModel ( this , db) ;
model- > setTable ( "EXAMPLE" ) ;
ui- > tableView- > setModel ( model) ;
model- > select ( ) ;
QStringList tables;
tables << "id" << "姓名" << "年龄" << "城市" ;
for ( int i = 0 ; i < tables. count ( ) ; i++ )
model- > setHeaderData ( i, Qt:: Horizontal, tables[ i] ) ;
model- > setSort ( 0 , Qt:: AscendingOrder) ;
ui- > tableView- > setEditTriggers ( QAbstractItemView:: NoEditTriggers) ;
ui- > tableView- > horizontalHeader ( ) - > setStretchLastSection ( true ) ;
ui- > tableView- > setColumnHidden ( 0 , true ) ;
ui- > tableView- > setColumnWidth ( 1 , 50 ) ;
ui- > tableView- > setColumnWidth ( 2 , 30 ) ;
}
MainWindow:: ~ MainWindow ( )
{
delete ui;
}
void MainWindow:: on_pushButton_clicked ( )
{
AddRecord * add = new AddRecord ( this ) ;
add- > exec ( ) ;
if ( ! add- > isClicked)
return ;
QString * str = add- > str;
QSqlTableModel * model = new QSqlTableModel ( this , db) ;
model- > setTable ( "EXAMPLE" ) ;
if ( ! ui- > lineEdit- > text ( ) . isEmpty ( ) )
model- > setFilter ( "city ='" + ui- > lineEdit- > text ( ) + "'" ) ;
int row = model- > rowCount ( ) ;
model- > insertRow ( row) ;
model- > setData ( model- > index ( row, 1 ) , str[ 0 ] ) ;
model- > setData ( model- > index ( row, 2 ) , str[ 1 ] . toInt ( ) ) ;
model- > setData ( model- > index ( row, 3 ) , str[ 2 ] ) ;
model- > submitAll ( ) ;
ui- > tableView- > setModel ( model) ;
model- > select ( ) ;
}
void MainWindow:: on_pushButton_2_clicked ( )
{
int row = ui- > tableView- > currentIndex ( ) . row ( ) ;
if ( QMessageBox:: Yes == QMessageBox:: question ( this , "Make Sure" , "确定删除第" + QString:: number ( row+ 1 ) + "行吗?" , QMessageBox:: Yes | QMessageBox:: No , QMessageBox:: Yes) )
{
QSqlTableModel * model = new QSqlTableModel ( this , db) ;
model- > setTable ( "EXAMPLE" ) ;
if ( ! ui- > lineEdit- > text ( ) . isEmpty ( ) )
model- > setFilter ( "city ='" + ui- > lineEdit- > text ( ) + "'" ) ;
if ( model- > select ( ) )
model- > removeRow ( row) ;
model- > submitAll ( ) ;
ui- > tableView- > setModel ( model) ;
model- > select ( ) ;
}
}
void MainWindow:: on_tableView_doubleClicked ( const QModelIndex & index)
{
QSqlTableModel * model = new QSqlTableModel ( this , db) ;
model- > setTable ( "EXAMPLE" ) ;
if ( ! ui- > lineEdit- > text ( ) . isEmpty ( ) )
model- > setFilter ( "city ='" + ui- > lineEdit- > text ( ) + "'" ) ;
bool isOK;
QString text = QInputDialog:: getText ( this , "Update" , "修改当前内容" , QLineEdit:: Normal, index. data ( ) . toString ( ) , & isOK) ;
if ( ! isOK)
return ;
if ( model- > select ( ) )
model- > setData ( model- > index ( index. row ( ) , index. column ( ) ) , text) ;
model- > submitAll ( ) ;
ui- > tableView- > setModel ( model) ;
model- > select ( ) ;
}
void MainWindow:: on_lineEdit_textChanged ( const QString & arg1)
{
QSqlTableModel * model = new QSqlTableModel ( this , db) ;
model- > setTable ( "EXAMPLE" ) ;
if ( ! arg1. isEmpty ( ) )
model- > setFilter ( "city ='" + arg1+ "'" ) ;
ui- > tableView- > setModel ( model) ;
model- > select ( ) ;
}
6. main.cpp
#include "mainwindow.h"
#include <QApplication>
int main ( int argc, char * argv[ ] )
{
QApplication a ( argc, argv) ;
MainWindow w;
w. show ( ) ;
return a. exec ( ) ;
}