BarTenderPrinter

(一)项目需求

在BarTender软件中负责价格牌标签的布局,并在BarTender中连接到SQL Server 数据库中,实现通过QT开发一个系统对数据库信息实现增删改查。

(二)效果展示

(三)实现步骤

(1)、数据库设计

数据库名:pricedb,表名:priceinfo

设计表

列名
数据类型
允许为Null值

caizhi

varchar(50)

chandi

varchar(50)

danjia

varchar(50)

guige

varchar(50)

pinming

varchar(50)

xinghao

varchar(50)

xiushi

varchar(50)

yanse

varchar(50)

(2)、新建BarTenderPrinter项目,类型选择widget

(3)、UI布局如下:

  1. 拖拽一个QLabel控件到父窗口上,并双击QLabel控件编辑内容:XX红木价格牌录入专用系统

  2. 拖拽一个QTableView到父窗口上

  3. 拖拽8个QLabel到父窗口上,并分别命名为:材质、产地、价格、规格、品名、型号、颜色、修饰,再拖拽8个QLineEdit控件,分别与8个QLabel做水平对应布局

  4. 拖拽4个QPushButton控件到父窗口,分别命名为:增加记录,删除当前记录,修改记录,清空所有记录

(4)、QT项目BarTenderPrinter文件内容如下:

#-------------------------------------------------
#
# Project created by QtCreator 2021-08-13T10:27:15
#
#-------------------------------------------------

QT       += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = BarTenderPrinter
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as 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 you use 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

CONFIG += c++11

SOURCES += \
        main.cpp \
        widget.cpp

HEADERS += \
        widget.h

FORMS += \
        widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RC_ICONS = 001.ico

(5)、在头文件widget.h中的内容如下:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QString>
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QDebug>
#include<QMessageBox>
#include<QSqlError>
#include<QLabel>
#include<QSqlQueryModel>
#include<QItemSelectionModel>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_add_clicked();

    void on_pushButton_4_clicked();

    void on_update_clicked();

    void on_tableView_clicked(const QModelIndex &index);

    void on_del_clicked();

private:
    Ui::Widget *ui;
    QSqlQuery *query;
    QSqlQueryModel *qmodel;
};

#endif // WIDGET_H

(6)、源文件widget.cpp的内容如下:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //打印所支持的驱动
    qDebug() << QSqlDatabase::drivers();

    //添加SQLServer数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

    //连接SQLServer数据库
    db.setHostName("192.168.10.10"); //数据库服务器IP
    db.setUserName("admin"); //数据库登录账号
    db.setPassword("passwd"); //数据库登录密码
    db.setDatabaseName("databasename"); //连接的数据库名称,此处为pricedb
    db.open();
    query = new QSqlQuery();
    query->exec("create table priceinfo(caizhi varchar(50),chandi varchar(50),danjia varchar(50),guige varchar(50),pinming varchar(50),xinghao varchar(50),xiushi varchar(50),yanse varchar(50))");

    //打开数据库

    if(!db.open())

    {
       QMessageBox::warning(this,"错误提示",db.lastError().text());
       return;

    }

    qmodel = new QSqlQueryModel();

    qmodel->setQuery("select caizhi ,chandi , danjia  ,guige   , pinming  , xinghao  , xiushi  , yanse   from priceinfo");
    ui->tableView->setModel(qmodel);
    //注意设置表头的位置,并且这样的方式比sql语句设置的方式好,SQL语句的方式只能是一次,后面会变化
    qmodel->setHeaderData(0,Qt::Horizontal,"材质");
    qmodel->setHeaderData(1,Qt::Horizontal,"产地");
    qmodel->setHeaderData(2,Qt::Horizontal,"单价");
    qmodel->setHeaderData(3,Qt::Horizontal,"规格");
    qmodel->setHeaderData(4,Qt::Horizontal,"品名");
    qmodel->setHeaderData(5,Qt::Horizontal,"型号");
    qmodel->setHeaderData(6,Qt::Horizontal,"修饰");
    qmodel->setHeaderData(7,Qt::Horizontal,"颜色");

ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //数据列宽度自适应, 横向填满表格
ui->tableView->scrollToBottom();
//    if (db.open())
//    {

//        QMessageBox::about(this,"连接成功提示","数据库连接成功");

//    }
//    else
//    {
//        QMessageBox::warning(this,"错误",db.lastError().text());
//        return;
//    }

}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_add_clicked()
{
//    材质 lineEdit
//    产地 lineEdit_2
//    价格 lineEdit_3
//    规格 lineEdit_4
//    品名 lineEdit_5
//    型号 lineEdit_6
//    修饰 lineEdit_7
//    颜色 lineEdit_8

    QString caizhi = ui->lineEdit->text();
    QString chandi = ui->lineEdit_2->text();
    QString danjia = ui->lineEdit_3->text();
    QString guige = ui->lineEdit_4->text();
    QString pinming = ui->lineEdit_5->text();
    QString xinghao = ui->lineEdit_6->text();
    QString xiushi = ui->lineEdit_7->text();
    QString yanse = ui->lineEdit_8->text();
    QString sql = "insert into priceinfo (caizhi,chandi,danjia,guige,pinming,xinghao,xiushi,yanse)values('"+caizhi+"','"+chandi+"','"+danjia+"','"+guige+"','"+pinming+"','"+xinghao+"','"+xiushi+"','"+yanse+"')";
    if(query->exec(sql)==true)
    {
     QMessageBox::about(this,"注册提示","记录添加成功");
     qmodel->setQuery("select * from priceinfo");
     ui->lineEdit->clear();
     ui->lineEdit_2->clear(); //清空文本框内容
     ui->lineEdit_3->clear(); //清空文本框内容
     ui->lineEdit_4->clear(); //清空文本框内容
     ui->lineEdit_5->clear(); //清空文本框内容
     ui->lineEdit_6->clear(); //清空文本框内容
     ui->lineEdit_7->clear(); //清空文本框内容
     ui->lineEdit_8->clear(); //清空文本框内容
     ui->lineEdit->setFocus(); //鼠标焦点移动到第一个文本框

    ui->tableView->scrollToBottom();

    }
    else
    {
        QMessageBox::about(this,"错误提示","记录添加失败");
            return;
    }




}

void Widget::on_pushButton_4_clicked()
{
    QString delsql ="delete  from priceinfo";
    query->exec(delsql);

    qmodel->setQuery("select * from priceinfo");
    ui->lineEdit->clear();
    ui->lineEdit_2->clear(); //清空文本框内容
    ui->lineEdit_3->clear(); //清空文本框内容
    ui->lineEdit_4->clear(); //清空文本框内容
    ui->lineEdit_5->clear(); //清空文本框内容
    ui->lineEdit_6->clear(); //清空文本框内容
    ui->lineEdit_7->clear(); //清空文本框内容
    ui->lineEdit_8->clear(); //清空文本框内容
    ui->lineEdit->setFocus();
    QMessageBox::information(this,"提示信息","已清空所有记录");
}

void Widget::on_update_clicked()
{
    QString caizhi = ui->lineEdit->text();
    QString chandi = ui->lineEdit_2->text();
    QString danjia = ui->lineEdit_3->text();
    QString guige = ui->lineEdit_4->text();
    QString pinming = ui->lineEdit_5->text();
    QString xinghao = ui->lineEdit_6->text();
    QString xiushi = ui->lineEdit_7->text();
    QString yanse = ui->lineEdit_8->text();

    QString delsql = "update priceinfo set caizhi= '"+caizhi+"',chandi='"+chandi+"',danjia='"+danjia+"',guige='"+guige+"',pinming = '"+pinming+"',xinghao='"+xinghao+"',xiushi='"+xiushi+"',yanse='"+yanse+"'  where pinming = '"+pinming+"'";
    query->exec(delsql);
    qmodel->setQuery("select * from priceinfo");
    ui->lineEdit->clear();
    ui->lineEdit_2->clear(); //清空文本框内容
    ui->lineEdit_3->clear(); //清空文本框内容
    ui->lineEdit_4->clear(); //清空文本框内容
    ui->lineEdit_5->clear(); //清空文本框内容
    ui->lineEdit_6->clear(); //清空文本框内容
    ui->lineEdit_7->clear(); //清空文本框内容
    ui->lineEdit_8->clear(); //清空文本框内容
    ui->lineEdit->setFocus();
    QMessageBox::information(this,"提示信息","已修改成功");
}

void Widget::on_tableView_clicked(const QModelIndex &index)
{
    QString caizhi1=index.siblingAtColumn(0).data().toString(); //获取点击行指定列的数据
    ui->lineEdit->setText(caizhi1); //将获取点击行指定列的数据赋予相应的文本输入框

    QString chandi1=index.siblingAtColumn(1).data().toString();
    ui->lineEdit_2->setText(chandi1);

    QString danjia1=index.siblingAtColumn(2).data().toString();
    ui->lineEdit_3->setText(danjia1);

    QString guige1=index.siblingAtColumn(3).data().toString();
    ui->lineEdit_4->setText(guige1);

    QString pinming1=index.siblingAtColumn(4).data().toString();
    ui->lineEdit_5->setText(pinming1);

    QString xinghao1=index.siblingAtColumn(5).data().toString();
    ui->lineEdit_6->setText(xinghao1);

    QString xiushi1=index.siblingAtColumn(6).data().toString();
    ui->lineEdit_7->setText(xiushi1);

    QString yanse1=index.siblingAtColumn(7).data().toString();
    ui->lineEdit_8->setText(yanse1);

}

void Widget::on_del_clicked()
{

   QString pinming2 = ui->lineEdit_5->text();

    QString delsql = "delete from priceinfo where pinming = '"+pinming2+"'";
    query->exec(delsql);
    qmodel->setQuery("select * from priceinfo");



}

最后更新于

这有帮助吗?