当前位置:   article > 正文

上位机UI界面设计项目_上位机画面制作

上位机画面制作

目录

一 软件原型效果

二 功能列表

三 代码实现

四 测试验证

五 项目工程打包发布

六 项目完整源码获取


一 软件原型效果

登录页面效果:

 主页实现效果:点击左边的菜单栏可以切换右边的页面,实现多功能轮流显示效果。

二 功能列表

  1. 有一个用户名输入框,可以输入任意字符;
  2. 有一个密码输入框,可以输入任意字符,但是需要以 *代替文本显示,避免密码泄露;
  3. 有一个登录按钮,当点击登录按钮时,到数据库检验用户名与密码的正确性,如果用户名密码验证正确,则跳转到程序主操作页面,否则提示用户检验用户名或密码是否正确。
  4. 海康摄像头视频预览、下载功能;
  5. 日志解析功能;
  6. 设备感应器信号实时查看功能;
  7. 发送指令操作设备硬件的功能;

三 代码实现

代码总共有七个类,功能分别如下:

各个类含义解释
类名称类含义

main.cpp

程序入口类,一般创建工程时自动创建,暂未做相关代码修改;

mainwindow.cpp

mainwindow.h

登录页面类,主要实现软件的登录功能,包括用户名、密码的校验;
databaseclass.h databaseclass.cpp数据库操作类,此项目使用的是的Qt自带sqlite嵌入式数据库;

controller.h

controller.cpp

程序主控制类,控制功能页面的跳转、增加、删除;

hk_widget.h

hk_widget.cpp

监控视频功能页面,可按实际需求进行修改与完善;
loganalysisclass.h loganalysisclass.cpp日志分析功能页面,可按实际需求进行修改与完善;
iodisplayclass.h iodisplayclass.cppIO监视功能页面,可按实际需求进行修改与完善;
hardwareoperationclass.h hardwareoperationclass.cpp硬件操作功能页面,可按实际需求进行修改与完善;
res.qrc资源管理文件,包括图片、图标资源;

源代码列表:

main.cpp

  1. #include "controller.h"
  2. #include "hk_widget.h"
  3. #include "mainwindow.h"
  4. #include <QApplication>
  5. #include <QDialog>
  6. int main(int argc, char *argv[])
  7. {
  8. QApplication a(argc, argv);
  9. MainWindow w;
  10. w.show();
  11. // controller ct;
  12. // ct.show();
  13. // HK_Widget hk;
  14. // hk.show();
  15. return a.exec();
  16. }

mainwindow.h

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include "QtSql/qsqldatabase.h"
  4. #include <QMainWindow>
  5. #include<QSharedPointer>
  6. #include<QtSql/QSqlDatabase>
  7. #include<QtSql/QSqlQuery>
  8. #include<QtSql/QSqlError>
  9. #include<QVector>
  10. #include<QDebug>
  11. #include <QLineEdit>
  12. #include <QPushButton>
  13. class MainWindow : public QMainWindow
  14. {
  15. Q_OBJECT
  16. public:
  17. MainWindow(QWidget *parent = nullptr);
  18. ~MainWindow();
  19. void initDataBase();
  20. // QWidget interface
  21. protected:
  22. void paintEvent(QPaintEvent *event);
  23. private slots:
  24. void loginSucessSlot(); //登录按钮的响应逻辑槽函数
  25. void regSlot(); //注册账户按钮
  26. private:
  27. QSqlDatabase db;
  28. QSqlQuery *sq;
  29. QLineEdit *nm;
  30. QLineEdit *ps;
  31. QPushButton *login;
  32. QPushButton *reg;
  33. };
  34. #endif // MAINWINDOW_H

mainwindow.cpp

  1. #include "controller.h"
  2. #include "mainwindow.h"
  3. #include<QFormLayout>
  4. #include <QGuiApplication>
  5. #include <QLabel>
  6. #include<QLineEdit>
  7. #include <QPainter>
  8. #include <QPalette>
  9. #include <QPixmap>
  10. #include <QPoint>
  11. #include<QPushButton>
  12. #include <QRect>
  13. #include<QScreen> //获取当前电脑的屏幕尺寸
  14. #include<QMessageBox>
  15. #include<QInputDialog>
  16. #include <QIcon>
  17. MainWindow::MainWindow(QWidget *parent)
  18. : QMainWindow(parent)
  19. {
  20. QScreen *sreen=QGuiApplication::primaryScreen(); //获取主屏幕对象
  21. QRect rect=sreen->availableGeometry(); //获取屏幕的可用大小
  22. // const int WIDTH=rect.size().width(); //屏幕的宽
  23. // const int HEIGHT=rect.size().height(); //获取屏幕的高
  24. // const int X=rect.x();
  25. // const int Y=rect.y();
  26. //设置窗体的一些属性
  27. resize(600,600);
  28. setWindowTitle("设备医生-登录页面");
  29. setWindowIcon(QIcon(":/login.png"));
  30. setWindowFlags(windowFlags()&~Qt::WindowMaximizeButtonHint); //禁用窗体的最大化按钮
  31. setFixedSize(width(),height()); //直接设置大小,禁用鼠标拖放改变窗体的大小
  32. //qDebug()<<X<<Y<<WIDTH<<HEIGHT<<this->x()<<this->y();
  33. //把当前窗体移动到屏幕中央
  34. rect=this->frameGeometry();
  35. QPoint centerPoint=sreen->availableGeometry().center();
  36. rect.moveCenter(centerPoint);
  37. this->move(rect.topLeft());
  38. //设置背景图片
  39. //setStyleSheet("MainWindow{ background-image: url(:/back2.jpg);}");
  40. //创建widget对象
  41. QWidget *w=new QWidget;
  42. w->setContentsMargins(width()/4,width()/4,width()/4,width()/4);
  43. QFormLayout *fm=new QFormLayout;
  44. fm->setSpacing(50); //设置中间的间隔
  45. fm->setHorizontalSpacing(5); //设置水平方向两个控件之间的位置
  46. //用户名
  47. QLabel *name=new QLabel("用户名: ");
  48. nm=new QLineEdit;
  49. //密码
  50. QLabel *password=new QLabel("密 码:");
  51. ps=new QLineEdit;
  52. ps->setEchoMode(QLineEdit::Password); //输入密码时设置为密码模式
  53. //登录按钮
  54. login=new QPushButton("登 录");
  55. //注册按钮
  56. reg=new QPushButton("注 册");
  57. //定义控件的背景色和渐变色
  58. QString styleColor= "background-color: rgb(0, 170, 0);"
  59. "background-color: qconicalgradient(cx:0, cy:0, angle:135, "
  60. "stop:0 rgba(255, 255, 0, 69), stop:0.375 rgba(255, 255, 0, 69), "
  61. "stop:0.423533 rgba(251, 255, 0, 145), stop:0.45 rgba(247, 255, 0, 208), "
  62. "stop:0.477581 rgba(255, 244, 71, 130), stop:0.518717 rgba(255, 218, 71, 130), "
  63. "stop:0.55 rgba(255, 255, 0, 255), stop:0.57754 rgba(255, 203, 0, 130), "
  64. "stop:0.625 rgba(255, 255, 0, 69), stop:1 rgba(255, 255, 0, 69));";
  65. //给控件设置背景颜色和渐变色
  66. login->setStyleSheet(styleColor);
  67. name->setStyleSheet(styleColor);
  68. password->setStyleSheet(styleColor);
  69. reg->setStyleSheet(styleColor);
  70. fm->addRow(name,nm);
  71. fm->addRow(password,ps);
  72. fm->addRow(login);
  73. fm->addRow(reg);
  74. w->setLayout(fm);
  75. setCentralWidget(w);
  76. //绑定按钮的信号与槽
  77. connect(login,SIGNAL(clicked(bool)),this,SLOT(loginSucessSlot()));
  78. connect(reg,SIGNAL(clicked(bool)),this,SLOT(regSlot()));
  79. initDataBase();//初始化数据库的连接与打开
  80. }
  81. MainWindow::~MainWindow()
  82. {
  83. //使用结束时关闭数据库,回收内存
  84. db.close();
  85. delete sq;
  86. delete nm;
  87. delete ps;
  88. delete login;
  89. delete reg;
  90. qDebug()<<"登录窗口退出并已经销毁";
  91. }
  92. //初始化数据库的连接与打开
  93. void MainWindow::initDataBase()
  94. {
  95. sq=NULL;
  96. //连接数据库
  97. if (QSqlDatabase::contains("qt_sql_default_connection"))
  98. {
  99. db = QSqlDatabase::database("qt_sql_default_connection");
  100. }
  101. else
  102. {
  103. db = QSqlDatabase::addDatabase("QSQLITE");
  104. db.setDatabaseName("mydb.db");
  105. db.setUserName("root");
  106. db.setPassword("123456");
  107. }
  108. if(db.open()){
  109. qDebug()<<"连接SQLite成功: ";
  110. //当只有一个数据库时,我们需要把sqlQuery类与数据库进行绑定,不然会执行语句失败和导入驱动失败
  111. sq=new QSqlQuery("mydb.db");
  112. QString create_sql = "create table student (name varchar(30) UNIQUE, password varchar(30));";
  113. if(sq->exec(create_sql))
  114. qDebug()<< "创建表成功:";
  115. else
  116. qDebug()<< "表创建失败!"+sq->lastError().text();
  117. }else{
  118. qDebug()<< "连接SQLite失败: "<<db.lastError().text();
  119. }
  120. }
  121. //重写绘制函数,在里面设置背景图片
  122. void MainWindow::paintEvent(QPaintEvent *event)
  123. {
  124. Q_UNUSED(event)
  125. QPainter painter(this);
  126. painter.setRenderHint(QPainter::Antialiasing);
  127. painter.drawPixmap(rect(),QPixmap(":/back2.jpg"));
  128. }
  129. //登录成功按钮的响应逻辑槽函数
  130. void MainWindow::loginSucessSlot()
  131. {
  132. //获取输入的用户名与密码
  133. QString name=nm->text().trimmed();
  134. QString password=ps->text().trimmed();
  135. // //如果用户名和密码为空,弹出提示信息,禁用登录按钮
  136. if(name.isEmpty() || password.isEmpty()){
  137. QMessageBox::information(this,"登录结果提示框","用户名、密码不能为空!",QMessageBox::Ok);
  138. qDebug()<<"用户名、密码不能为空!";
  139. }else {
  140. QString nm,pw;
  141. // //在数据库中查询用户信息
  142. QString sql=QString("select *from student where name='%1';").arg(name);
  143. // //开始执行查询语句
  144. if(sq->exec(sql)){
  145. while (sq->next()) {
  146. nm=sq->value("name").toString();
  147. pw=sq->value("password").toString();
  148. }
  149. qDebug()<<"查询成功";
  150. if(name==nm && password==pw){
  151. //密码比对正确,登录成功!
  152. //QMessageBox::information(this,"登录结果提示框","恭喜你,登录成功!",QMessageBox::Ok);
  153. //建立新窗口对象并显示,提示隐藏登录窗口
  154. this->hide();
  155. controller *c=new controller();
  156. c->show();
  157. this->close();
  158. }else {
  159. QMessageBox::information(this,"登录结果提示框","密码错误,登录失败!",QMessageBox::Ok);
  160. }
  161. }else{
  162. qDebug()<<"查询数据失败:";
  163. }
  164. }
  165. }
  166. //注册账户
  167. void MainWindow::regSlot()
  168. {
  169. QString name,password;
  170. bool flag;
  171. QInputDialog dialog;
  172. QString np=dialog.getMultiLineText(this,"账户注册","用户名与密码之间用一个空格隔开","",&flag);
  173. if(flag){
  174. if(! (np.trimmed().isEmpty()) ){
  175. QStringList list=np.split(" ");
  176. if(list.length()==2){
  177. name=list.at(0).trimmed();
  178. qDebug()<<name;
  179. password=list.at(1).trimmed();
  180. qDebug()<<password;
  181. //插入一条数据
  182. QString sql=QString( "insert into student(name,password) values('%1',%2);").arg(name).arg(password);
  183. if(sq->exec(sql)){
  184. qDebug()<<"插入成功";
  185. QMessageBox::information(this,"注册结果提示框","注册成功,请使用刚刚注册成功的账号与密码登录!",QMessageBox::Ok);
  186. }else{
  187. QMessageBox::information(this,"注册结果提示框","注册失败,请试试登录或重新注册新账户",QMessageBox::Ok);
  188. qDebug()<<"插入失败";
  189. }
  190. }
  191. }
  192. }
  193. }


databaseclass.h

  1. #ifndef DATABASECLASS_H
  2. #define DATABASECLASS_H
  3. #include <QObject>
  4. #include<QtSql/QSqlDatabase>
  5. #include<QtSql/QSqlQuery>
  6. #include<QtSql/QSqlError>
  7. #include<QVector>
  8. #include<QMutex>
  9. #include<QSharedPointer>
  10. #include<QDebug>
  11. #include<stdio.h>
  12. /*
  13. 数据库操作类设计要点:
  14. 1,把数据库设计为单例模式,确保整个程序只有一个数据实例;
  15. 2,使用锁机制确保多线程操作时安全访问;
  16. 3,使用智能指针管理全局对象,在适当的时机自动释放对象。
  17. */
  18. class DatabaseClass:public QObject
  19. {
  20. Q_OBJECT
  21. public:
  22. DatabaseClass();
  23. ~DatabaseClass();
  24. //数据库的连接、增、删、改、查、数据库关闭的方法
  25. //建立并连接数据库,并提供数据库的连接名称、数据库的驱动名称、需要新建的数据库名称、访问数据库的用户名、访问数据库的密码
  26. bool databaseCreate(QString sqlConnectName="qt_sql_default_connection",QString databaseDriverName="QSQLITE",QString databaseName="my_db.db",QString userName="root",QString password="123456");
  27. //建立数据库表
  28. bool createTable(QString createTableSql);
  29. //查询数据: 把查询到的数据存放在集合中
  30. QVector<QString> selectData(QString SelectSql);
  31. //增加数据
  32. bool insertData(QString insertSql);
  33. //修改数据
  34. bool updateData(QString updateSql);
  35. //删除数据
  36. bool deleteData(QString deleteData);
  37. private:
  38. QVector<QString> vector;
  39. //数据库操作对象
  40. QSqlDatabase db;
  41. QSharedPointer<QSqlQuery> sq=NULL;
  42. };
  43. #endif // DATABASECLASS_H

databaseclass.cpp

  1. #include "databaseclass.h"
  2. //构造函数
  3. DatabaseClass::DatabaseClass(){}
  4. DatabaseClass::~DatabaseClass()
  5. {
  6. if(db.isOpen()){
  7. db.close();
  8. qDebug()<<"数据库关闭成功!"<<Qt::endl;
  9. }
  10. }
  11. //建立并连接数据库
  12. bool DatabaseClass::databaseCreate(QString sqlConnectName, QString databaseDriverName, QString databaseName, QString userName, QString password)
  13. {
  14. //判断当前数据库是否已包括默认的连接名称
  15. if(QSqlDatabase::contains(sqlConnectName)){
  16. db=QSqlDatabase::database(sqlConnectName);
  17. qDebug()<<"数据库使用默认连接名称!"<<sqlConnectName<<Qt::endl;
  18. }else {
  19. db=QSqlDatabase::addDatabase(databaseDriverName);
  20. db.setDatabaseName(databaseName);
  21. db.setUserName(userName);
  22. db.setPassword(password);
  23. qDebug()<<":"<<"数据库使用自定义的连接名称"<<databaseName<<Qt::endl;
  24. }
  25. if(db.open(userName,password)){
  26. qDebug()<<":"<<"数据打开成功!"<<Qt::endl;
  27. //绑定数据库
  28. sq=QSharedPointer<QSqlQuery>(new QSqlQuery(databaseName));
  29. qDebug()<<"QSqlQuery指定数据库"<<Qt::endl;
  30. return true;
  31. }
  32. qDebug()<<":"<<"数据打开失败: "<<db.lastError()<<Qt::endl;
  33. return false;
  34. }
  35. //建立数据库表
  36. bool DatabaseClass::createTable(QString createTableSql)
  37. {
  38. if(sq->exec(createTableSql)){
  39. qDebug()<<"建表语句"<<createTableSql<<"执行成功"<<Qt::endl;
  40. return true;
  41. }
  42. qDebug()<<"建表语句"<<createTableSql<<"执行失败"<<Qt::endl;
  43. return false;
  44. }
  45. //查询数据,并把数据返回存放至动态数组中
  46. QVector<QString> DatabaseClass::selectData(QString SelectSql)
  47. {
  48. //先清空全局容器
  49. if(vector.size() != 0){
  50. vector.clear();
  51. }
  52. if(sq->exec(SelectSql)){
  53. qDebug()<<"查询数据成功"<<Qt::endl;
  54. while (sq->next()) {
  55. vector.push_back(sq->value("username").toString());
  56. vector.push_back(sq->value("password").toString());
  57. }
  58. }
  59. return vector;
  60. }
  61. //增加数据
  62. bool DatabaseClass::insertData(QString insertSql)
  63. {
  64. if(sq->exec(insertSql)){
  65. qDebug()<<"增加数据"<<insertSql<<"执行成功"<<Qt::endl;
  66. return true;
  67. }
  68. qDebug()<<"增加数据"<<insertSql<<"执行失败"<<Qt::endl;
  69. return false;
  70. }
  71. //修改数据
  72. bool DatabaseClass::updateData(QString updateSql)
  73. {
  74. if(sq->exec(updateSql)){
  75. qDebug()<<"修改数据"<<updateSql<<"执行成功"<<Qt::endl;
  76. return true;
  77. }
  78. qDebug()<<"修改数据"<<updateSql<<"执行失败"<<Qt::endl;
  79. return false;
  80. }
  81. //删除数据
  82. bool DatabaseClass::deleteData(QString deleteData)
  83. {
  84. if(sq->exec(deleteData)){
  85. qDebug()<<"删除数据"<<deleteData<<"执行成功"<<Qt::endl;
  86. return true;
  87. }
  88. qDebug()<<"删除数据"<<deleteData<<"执行失败"<<Qt::endl;
  89. return false;
  90. }


controller.h

  1. #ifndef CONTROLLER_H
  2. #define CONTROLLER_H
  3. #include <QMainWindow>
  4. #include <QPushButton>
  5. class controller : public QMainWindow
  6. {
  7. Q_OBJECT
  8. public:
  9. explicit controller(QWidget *parent = nullptr);
  10. private:
  11. //功能按钮对象
  12. QPushButton *HK_camera=NULL; //海康监控
  13. QPushButton *Log_analyzing=NULL; //日志分析
  14. QPushButton *Sensor_check=NULL; //感应器检测
  15. QPushButton *Hardware_operate=NULL; //硬件操作
  16. //页面排版对象
  17. QTabWidget *tabWidget=NULL;
  18. //tab页面管理
  19. void QTabWidgetManage();
  20. //tab属性设置
  21. void QTabWidgetConfiguration();
  22. private slots:
  23. void tab1();
  24. void tab2();
  25. void tab3();
  26. void tab4();
  27. };
  28. #endif // CONTROLLER_H

controller.cpp

  1. #include "controller.h"
  2. #include "hardwareoperationclass.h"
  3. #include "hk_widget.h"
  4. #include "iodisplayclass.h"
  5. #include "loganalysisclass.h"
  6. #include "qguiapplication.h"
  7. #include <QPoint>
  8. #include <QRect>
  9. #include <QScreen>
  10. #include<QHBoxLayout>
  11. #include<QFormLayout>
  12. #include<QTabBar>
  13. controller::controller(QWidget *parent): QMainWindow{parent}
  14. {
  15. QScreen *sreen=QGuiApplication::primaryScreen(); //获取主屏幕对象
  16. QRect rect=sreen->availableGeometry(); //获取屏幕的可用大小
  17. // const int WIDTH=rect.size().width(); //屏幕的宽
  18. // const int HEIGHT=rect.size().height(); //获取屏幕的高
  19. // const int X=rect.x();
  20. // const int Y=rect.y();
  21. //设置窗体的一些属性
  22. resize(600,600);
  23. setWindowTitle("设备医生-主控制台");
  24. setWindowIcon(QIcon(":/main.png"));
  25. // setWindowFlags(windowFlags()&~Qt::WindowMaximizeButtonHint); //禁用窗体的最大化按钮
  26. // setFixedSize(width(),height()); //直接设置大小,禁用鼠标拖放改变窗体的大小
  27. //qDebug()<<X<<Y<<WIDTH<<HEIGHT<<this->x()<<this->y();
  28. //把当前窗体移动到屏幕中央
  29. rect=this->frameGeometry();
  30. QPoint centerPoint=sreen->availableGeometry().center();
  31. rect.moveCenter(centerPoint);
  32. this->move(rect.topLeft());
  33. //设置背景图片
  34. setStyleSheet("QMainWindow{ background-image: url(:/back3.jpg);}");
  35. //创建widget对象,用于装载所有子控件
  36. QWidget *w=new QWidget;
  37. // w->setContentsMargins(width()/4,width()/4,width()/4,width()/4);
  38. //界面根布局:采用水平布局
  39. QHBoxLayout *hBoxLayout=new QHBoxLayout;
  40. //使用表单布局组织功能按钮与tab页面
  41. QGridLayout *gridLayouts=new QGridLayout;
  42. //使用表格控件组织左侧的主菜单按钮
  43. QGridLayout *gridLayout=new QGridLayout;
  44. //使用tab控件轮流显示软件不同的操作页面
  45. tabWidget=new QTabWidget;
  46. //初始化按钮
  47. HK_camera=new QPushButton("海康监控");
  48. Log_analyzing=new QPushButton("日志分析");
  49. Sensor_check=new QPushButton("IO监视");
  50. Hardware_operate=new QPushButton("硬件操作");
  51. //设置表格控件之间的水平、垂直间距
  52. gridLayout->setHorizontalSpacing(0);
  53. gridLayout->setVerticalSpacing(0);
  54. gridLayout->addWidget(HK_camera);
  55. gridLayout->addWidget(Log_analyzing);
  56. gridLayout->addWidget(Sensor_check);
  57. gridLayout->addWidget(Hardware_operate);
  58. gridLayouts->setHorizontalSpacing(5);
  59. gridLayouts->setVerticalSpacing(5);
  60. gridLayouts->addLayout(gridLayout,0,0);
  61. gridLayouts->addWidget(tabWidget,0,1);
  62. //全局使用水平布局
  63. hBoxLayout->addLayout(gridLayouts);
  64. //把所有元素全部放到widget中
  65. w->setLayout(hBoxLayout);
  66. //设置当前的widget为中心控件
  67. setCentralWidget(w);
  68. //tab页面管理与属性配置
  69. QTabWidgetManage();
  70. QTabWidgetConfiguration();
  71. //默认显示第一个页面
  72. tabWidget->setCurrentIndex(0);
  73. //绑定信号与槽
  74. connect(HK_camera,SIGNAL(clicked(bool)),this,SLOT(tab1()));
  75. connect(Log_analyzing,SIGNAL(clicked(bool)),this,SLOT(tab2()));
  76. connect(Sensor_check,SIGNAL(clicked(bool)),this,SLOT(tab3()));
  77. connect(Hardware_operate,SIGNAL(clicked(bool)),this,SLOT(tab4()));
  78. }
  79. //tab页面管理
  80. void controller::QTabWidgetManage()
  81. {
  82. //添加海康监控页面
  83. HK_Widget *hk=new HK_Widget;
  84. tabWidget->addTab(hk,"海康监控");
  85. //添加日志分析页面
  86. LogAnalysisClass *log=new LogAnalysisClass;
  87. tabWidget->addTab(log,"日志分析");
  88. //添加IO界面
  89. IODisplayClass *io=new IODisplayClass;
  90. tabWidget->addTab(io,"IO监视");
  91. //添加硬件操作页面
  92. hardwareOperationClass *Hardware=new hardwareOperationClass;
  93. tabWidget->addTab(Hardware,"硬件操作");
  94. }
  95. //tab属性设置
  96. void controller::QTabWidgetConfiguration()
  97. {
  98. //设置tabwidget的一些属性
  99. tabWidget->setTabsClosable(true);//标签上面显示关闭按钮
  100. tabWidget->setUsesScrollButtons(true);//标签太多时显示滚动按钮
  101. //tabWidget->setMovable(true); //设置tab为可移动的
  102. tabWidget->setTabPosition(QTabWidget::North); //标签显示位置向北
  103. tabWidget->setTabShape(QTabWidget::Rounded);//设置tab的形状为原型
  104. //tabWidget->tabBar()->hide();//隐藏标签头
  105. tabWidget->setTabIcon(0,QIcon(QPixmap(":/login.png")));
  106. tabWidget->setTabIcon(1,QIcon(QPixmap(":/login.png")));
  107. tabWidget->setTabIcon(2,QIcon(QPixmap(":/login.png")));
  108. tabWidget->setTabIcon(3,QIcon(QPixmap(":/login.png")));
  109. }
  110. void controller::tab1()
  111. {
  112. tabWidget->setCurrentIndex(0);
  113. }
  114. void controller::tab2()
  115. {
  116. tabWidget->setCurrentIndex(1);
  117. }
  118. void controller::tab3()
  119. {
  120. tabWidget->setCurrentIndex(2);
  121. }
  122. void controller::tab4()
  123. {
  124. tabWidget->setCurrentIndex(3);
  125. }


hk_widget.h

  1. #ifndef HK_WIDGET_H
  2. #define HK_WIDGET_H
  3. #include <QWidget>
  4. #include<QComboBox>
  5. #include<QLabel>
  6. #include<QLineEdit>
  7. #include<QPushButton>
  8. #include <QMainWindow>
  9. class HK_Widget : public QWidget
  10. {
  11. Q_OBJECT
  12. public:
  13. explicit HK_Widget(QWidget *parent = nullptr);
  14. signals:
  15. private:
  16. QComboBox *ip_comboBox=NULL; //IP地址选择
  17. QComboBox *username_comboBox=NULL; //用户名选择
  18. QLineEdit *password_lineEdit=NULL;//密码输入框
  19. QComboBox *CameraId_comboBox=NULL; //摄像头选择
  20. QComboBox *port_comboBox=NULL; //端口号
  21. QPushButton *videoPriview_button=NULL;//视频预览
  22. QPushButton *videoDownload_button=NULL;//视频下载
  23. };
  24. #endif // HK_WIDGET_H

hk_widget.cpp

  1. #include "hk_widget.h"
  2. #include "qguiapplication.h"
  3. #include<QFormLayout>
  4. #include <QIcon>
  5. #include <QPoint>
  6. #include <QScreen>
  7. HK_Widget::HK_Widget(QWidget *parent)
  8. : QWidget{parent}
  9. {
  10. QScreen *sreen=QGuiApplication::primaryScreen(); //获取主屏幕对象
  11. QRect rect=sreen->availableGeometry(); //获取屏幕的可用大小
  12. //控件背景颜色
  13. QString colors="background-color: rgb(170, 170, 0);";
  14. QString blue="background-color: rgb(0, 170, 127);";
  15. //使用表单控件组织参数设置
  16. QFormLayout *formLayout=new QFormLayout;
  17. //属性配置标签
  18. QLabel *sets=new QLabel("属性选择页面");
  19. sets->setStyleSheet(colors);
  20. sets->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter );
  21. //创建IP标签
  22. QLabel *ip=new QLabel("ip 地址:");
  23. //ip->setStyleSheet(colors);
  24. //实例化IP下拉框
  25. ip_comboBox=new QComboBox;
  26. ip_comboBox->addItem("192.168.2.105");
  27. //创建用户名标签
  28. QLabel *name=new QLabel("用 户 名: ");
  29. //name->setStyleSheet(colors);
  30. //实例化用户名下拉框
  31. username_comboBox=new QComboBox;
  32. username_comboBox->addItem("admin");
  33. username_comboBox->addItem("meituan");
  34. //创建密码标签
  35. QLabel *password=new QLabel("密 码:");
  36. //password->setStyleSheet(colors);
  37. //实例化密码输入框
  38. password_lineEdit=new QLineEdit;
  39. password_lineEdit->setEchoMode(QLineEdit::Password); //显示模式设置为密码模式
  40. //创建摄像头选择标签
  41. QLabel *camera=new QLabel("摄像头选择:");
  42. //camera->setStyleSheet(colors);
  43. //实例化摄像头选择下拉框
  44. CameraId_comboBox=new QComboBox;
  45. CameraId_comboBox->addItem("顶部摄像头");
  46. CameraId_comboBox->addItem("内部摄像头");
  47. CameraId_comboBox->addItem("前部摄像头");
  48. //创建端口号标签
  49. QLabel *port=new QLabel("端 口 号 :");
  50. //port->setStyleSheet(colors);
  51. //实例化端口号选择下拉框,添加几个不易重复的端口号
  52. port_comboBox=new QComboBox;
  53. port_comboBox->addItem("8000");
  54. port_comboBox->addItem("9999");
  55. port_comboBox->addItem("12900");
  56. //视频下载与视频预览按钮实例化
  57. videoPriview_button=new QPushButton("视 频 预 览");
  58. videoDownload_button=new QPushButton("视 频 下 载");
  59. //把标签、下拉框、输入框、按钮分别加入到表单布局中
  60. formLayout->addRow(sets);
  61. formLayout->addRow(ip,ip_comboBox);
  62. formLayout->addRow(name,username_comboBox);
  63. formLayout->addRow(password,password_lineEdit);
  64. formLayout->addRow(camera,CameraId_comboBox);
  65. formLayout->addRow(port,port_comboBox);
  66. formLayout->addRow(videoPriview_button);
  67. formLayout->addRow(videoDownload_button);
  68. setLayout(formLayout);
  69. }


loganalysisclass.h

  1. #ifndef LOGANALYSISCLASS_H
  2. #define LOGANALYSISCLASS_H
  3. #include <QWidget>
  4. class LogAnalysisClass : public QWidget
  5. {
  6. Q_OBJECT
  7. public:
  8. explicit LogAnalysisClass(QWidget *parent = nullptr);
  9. signals:
  10. };
  11. #endif // LOGANALYSISCLASS_H

loganalysisclass.cpp

  1. #include "loganalysisclass.h"
  2. LogAnalysisClass::LogAnalysisClass(QWidget *parent)
  3. : QWidget{parent}
  4. {
  5. }


iodisplayclass.h

  1. #ifndef IODISPLAYCLASS_H
  2. #define IODISPLAYCLASS_H
  3. #include <QWidget>
  4. class IODisplayClass : public QWidget
  5. {
  6. Q_OBJECT
  7. public:
  8. explicit IODisplayClass(QWidget *parent = nullptr);
  9. signals:
  10. };
  11. #endif // IODISPLAYCLASS_H

iodisplayclass.cpp

  1. #include "iodisplayclass.h"
  2. IODisplayClass::IODisplayClass(QWidget *parent)
  3. : QWidget{parent}
  4. {
  5. }


hardwareoperationclass.h

  1. #ifndef HARDWAREOPERATIONCLASS_H
  2. #define HARDWAREOPERATIONCLASS_H
  3. #include <QWidget>
  4. class hardwareOperationClass : public QWidget
  5. {
  6. Q_OBJECT
  7. public:
  8. explicit hardwareOperationClass(QWidget *parent = nullptr);
  9. signals:
  10. };
  11. #endif // HARDWAREOPERATIONCLASS_H

hardwareoperationclass.cpp

  1. #include "hardwareoperationclass.h"
  2. hardwareOperationClass::hardwareOperationClass(QWidget *parent)
  3. : QWidget{parent}
  4. {
  5. }

四 测试验证

运行工程,首次进入登录、注册页面,

 

程序一开始是没有账号密码的,需要注册一下,在注册页面输入用户名与密码时,用一个空格隔开,

 输入用户名与密码后点击OK,注册成功后用刚刚注册的账号密码登录,

 

 登录成功后,进入主控页面,

在点击左侧的功能按钮时,右侧的页面会切换到对应的功能主页。

五 项目工程打包发布

项目的打包发布,我们使用qt自带的打包工具 windeployqt ,操作步骤:

1,把工程文件切换为发布模式 release,然后执行程序,接着找到当前工程目录所在路径下release之后的可执行文件 ,在windows系统下是.exe文件。

 

把这个exe文件复制到一个空的文件夹,如在桌面新建一个demo的文件,然后把.exe文件复制到demo文件夹下面,

 

在程序菜单找到qt 64位命令控制台,

打开控制台后,执行指令 指令 cd/d C:\Users\11010\Desktop\demo 切换到.exe所在文件夹demo下, 接着执行命令 windeployqt gui_1_loginGui.exe 开始寻找依赖,

 等待依赖寻找完成后,直接双击exe文件即可执行,如果需要发布给其他人使用,直接把demo文件夹一起发过去即可,不过也可以作成安装包的形式发布,这个后面慢慢讲解!

六 项目完整源码获取

源代码下载地址:https://download.csdn.net/download/XiaoWang_csdn/87704416

源代码clone地址:git@gitcode.net:XiaoWang_csdn/gui_1_logingui.git

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/112173?site
推荐阅读
相关标签
  

闽ICP备14008679号