一、项目介绍
通过TCP/IP协议实现客户端和和服务端的链接,服务端和下位机通过串口通信的方式链接,传递信息,客户端通过账号登录进入进入智能家居服务系统,账号登录和QQ登录类似,我采用的是数据库的方式实现数据的存储和调用,界面使用qt-ui的方式进行建立,有摄像头操作,音乐播放器操作和视频操作,客户端通过按下开关的操作将json数据发送到服务端再经过串口的方式对下位机进行操作。
二、项目技术
qt-UI界面,c++,json,TCP/IP协议,摄像头,音乐播放器,视频操作,串口通信,stm32f407vet6。
三、项目内容
1.服务端头文件:需要在pro文件中添加 network(TCP数据链接) serialport(串口通信)
#ifndef SERVERWINDOW_H
#define SERVERWINDOW_H
#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>
#include <QHostAddress> // 引入串口通信的两个头文件(第一步)
#include <QSerialPort> // 提供访问串口的功能
#include <QSerialPortInfo> // 提供系统中存在的串口信息
namespace Ui {
class serverwindow;
}
class serverwindow : public QMainWindow
{
Q_OBJECT
public:
explicit serverwindow(QWidget *parent = 0);
~serverwindow();
QTcpServer* m_server; //服务器对象
QTcpSocket* m_tcp; //客户端对象
QSerialPort m_serial;//串口
private slots:
//点击连接服务器
void on_pushButton_clicked();
//点击发送按钮
void on_pushButton_2_clicked();
//客户端连接上
void ClientConnect();
//有数据来了,则响应readyread信号
void readData();
//客户端断开连接
void Clientdisconnect();
//打开串口
void on_pushButton_3_clicked();
//关闭串口
void on_pushButton_4_clicked();
//串口接受信息的处理函数
void messlot();
//刷新串口
void on_pushButton_5_clicked();
private:
Ui::serverwindow *ui;
};
#endif // SERVERWINDOW_H
服务端.c文件:
#include "serverwindow.h"
#include "ui_serverwindow.h"
serverwindow::serverwindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::serverwindow)
{
ui->setupUi(this);
setWindowTitle(tr("服务端"));
}
serverwindow::~serverwindow()
{
delete ui;
}
//启动服务器
void serverwindow::on_pushButton_clicked()
{
//第一步:创建对象 QTcpserver对象
m_server= new QTcpServer(this);
//第二步:监听 listen函数
unsigned short port = ui->lineEdit->text().toShort();
m_server->listen(QHostAddress::AnyIPv4 ,port);
//第三步:处理信号槽函数处理 (槽函数中获取客户端的socket)
QObject::connect(m_server,&QTcpServer::newConnection,
this,&serverwindow::ClientConnect);
// nextpendingconnction函数可以获取到客户端的socket,也就是QTCPsocket对象
//第四步:如果连接上了,设置按钮为灰色
ui->pushButton->setEnabled(false);
}
//发送数据
void serverwindow::on_pushButton_2_clicked()
{
//使用write函数,QTcpsocket对象
QString temp = ui->textEdit_2->toPlainText();//获取textedit的文本
m_tcp->write(temp.toUtf8());
if(!temp.isEmpty() )
{
ui->textEdit->append(temp);
}
ui->textEdit_2->clear();
}
//客户端连接后响应
void serverwindow::ClientConnect()
{
//返回客户端的tcp
m_tcp = m_server->nextPendingConnection();
//打印下客户端的ip地址
QHostAddress addr = m_tcp->peerAddress();
ui->textEdit->append(addr.toString());
connect(m_tcp,&QTcpSocket::readyRead,this,&serverwindow::readData );
connect(m_tcp,&QTcpSocket::disconnected ,this,&serverwindow::Clientdisconnect );
}
//服务器接受数据
void serverwindow::readData()
{
QString temp = m_tcp->readAll();
if(!temp.isNull())
{
ui->textEdit->append(temp);
}
}
//客户端断开连接
void serverwindow::Clientdisconnect()
{
ui->textEdit->append("客户端断开连接");
m_tcp->close();
ui->pushButton->setEnabled(true);
ui->pushButton->setText("启动服务器");
}
//刷新串口
void serverwindow::on_pushButton_5_clicked()
{
//清空串口名
ui->comboBox->clear();
//遍历串口信息
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
ui->comboBox->addItem(info.portName());
}
}
//打开串口
void serverwindow::on_pushButton_3_clicked()
{
m_serial.setPortName(ui->comboBox->currentText());//设置串口名
m_serial.setBaudRate(ui->comboBox_2->currentText().toInt());//设置波特率
m_serial.open(QIODevice::ReadWrite);
if(m_serial.isOpen())
{
ui->label_7->setText("串口打开成功");
connect(&m_serial,&QSerialPort::readyRead,this,&serverwindow::messlot);
}
else
{
ui->label_7->setText("串口打开失败");
}
}
//串口接受信息的处理函数
void serverwindow::messlot()
{
QByteArray array = m_serial.readAll();
ui->textEdit->insertPlainText(array);
}
//关闭串口
void serverwindow::on_pushButton_4_clicked()
{
m_serial.close();
if(m_serial.isOpen())
{
ui->label_7->setText("串口关闭失败");
connect(&m_serial,&QSerialPort::readyRead,this,&serverwindow::messlot);
}
else
{
ui->label_7->setText("串口已关闭");
}
}
服务端ui界面:
2.客户端.h文件:需要在pro文件中加入serialport(TCP通信) sql(数据库) multimedia和 multimediawidgets(媒体,摄像头,音乐播放器)
①客户端界面1
#ifndef CLIENT1_H
#define CLIENT1_H
#include <QWidget>
#include <QSqlDataBase>
#include <QDebug>
#include <QSqlQuery>
#include <QSqlError>
#include <QMessageBox>
#include<QMovie>
#include"client2.h"
#include"client3.h"
namespace Ui {
class client1;
}
class client1 : public QWidget
{
Q_OBJECT
public:
explicit client1(QWidget *parent = 0);
~client1();
private slots:
//显示密码
void on_checkBox_2_clicked();
//记住密码
void on_checkBox_clicked();
//登录
void on_pushButton_clicked();
//注册
void on_pushButton_2_clicked();
private:
Ui::client1 *ui;
};
static bool createConnection2()
{
QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE","connection1"); //创建指定连接名称的数据库
db1.setDatabaseName("data.db"); //设置数据库名称
if(!db1.open()){ //打开数据库
qDebug() << "cannot open the database";
return false;
}
QSqlQuery query1(db1); //对指定连接的数据库执行sql语句
query1.exec("create table data1(id varchar(20),mima varchar(20))");
query1.exec("insert into data1(id,mima) values('123456','123456')");
query1.exec("insert into data1(id,mima) values('654321','654321')");
query1.exec("insert into data1(id,mima) values('4444','4444')");
return true;
}
#endif // CLIENT1_H
界面1.c文件
#include "client1.h"
#include "ui_client1.h"
client1::client1(QWidget *parent) :
QWidget(parent),
ui(new Ui::client1)
{
ui->setupUi(this);
setWindowTitle(tr("登录"));
ui->lineEdit_2->setEchoMode(QLineEdit::Password);
QMovie *movie1 = new QMovie(":/new/prefix1/ies/ies1.gif");
ui->label_3->setMovie(movie1);
ui->label_3->setScaledContents(true);
movie1->start();
}
client1::~client1()
{
delete ui;
}
void client1::on_checkBox_clicked()
{
static int flag1 =1;
//-------------------------------------------------------------------------------------
//数据库处理
QSqlDatabase db1 = QSqlDatabase::database("connection1"); //得到指定连接名称数据库
QSqlQuery query1(db1);
query1.exec("select * from data1"); //执行sql语句
//---------------------------------------------------------------------------------------
if(flag1)
{
while (query1.next())
{
if(query1.value(0).toString() == ui->comboBox->currentText())
{
QString temp = query1.value(1).toString();
ui->lineEdit_2->setText(temp);
flag1=0;
break;
}
}
}
else
{
ui->lineEdit_2->setText("");
flag1=1;
}
}
//显示密码
void client1::on_checkBox_2_clicked()
{
static int flag =1;
if(flag)
{
ui->lineEdit_2->setEchoMode(QLineEdit::Normal);
flag=0;
}
else
{
ui->lineEdit_2->setEchoMode(QLineEdit::Password);
flag=1;
}
}
//登录
void client1::on_pushButton_clicked()
{
//-------------------------------------------------------------------------------------
//数据库处理
QSqlDatabase db1 = QSqlDatabase::database("connection1"); //得到指定连接名称数据库
QSqlQuery query1(db1);
query1.exec("select * from data1"); //执行sql语句
//---------------------------------------------------------------------------------------
//密码判断对比
while (query1.next())
{
if(query1.value(0).toString() == ui->comboBox->currentText())
{
if(query1.value(1).toString() == ui->lineEdit_2->text())
{
client3 *configWindow = new client3;
configWindow->show();
close();
break;
}
}
}
}
//注册
void client1::on_pushButton_2_clicked()
{
client2 *configWindow = new client2;
configWindow->show();
}
界面1ui界面
②界面2.h文件
#ifndef CLIENT2_H
#define CLIENT2_H
#include <QWidget>
#include<QMovie>
#include"client1.h"
namespace Ui {
class client2;
}
class client2 : public QWidget
{
Q_OBJECT
public:
explicit client2(QWidget *parent = 0);
~client2();
private slots:
//记住密码
void on_checkBox_clicked();
//关闭界面
void on_pushButton_6_clicked();
//注册账号
void on_pushButton_5_clicked();
private:
Ui::client2 *ui;
};
#endif // CLIENT2_H
界面2.c文件
#include "client2.h"
#include "ui_client2.h"
client2::client2(QWidget *parent) :
QWidget(parent),
ui(new Ui::client2)
{
ui->setupUi(this);
setWindowTitle(tr("注册"));
ui->lineEdit_5->setEchoMode(QLineEdit::Password);
QMovie *movie1 = new QMovie(":/new/prefix1/ies/ies.gif");
ui->label->setMovie(movie1);
ui->label->setScaledContents(true);
movie1->start();
}
client2::~client2()
{
delete ui;
}
//记住密码操作
void client2::on_checkBox_clicked()
{
static int flag =1;
if(flag)
{
ui->lineEdit_5->setEchoMode(QLineEdit::Normal);
flag=0;
}
else
{
ui->lineEdit_5->setEchoMode(QLineEdit::Password);
flag=1;
}
}
//关闭窗口
void client2::on_pushButton_6_clicked()
{
close();
}
//调用数据库进行注册
void client2::on_pushButton_5_clicked()
{
//-------------------------------------------------------------------------------------
//数据库处理
QSqlDatabase db1 = QSqlDatabase::database("connection1"); //得到指定连接名称数据库
QSqlQuery query1(db1);
query1.exec("select * from data1"); //执行sql语句
//---------------------------------------------------------------------------------------
//将注册的账号存入数据库
query1.prepare("insert into data1(id,mima) values(?,?)");
QString idValue = ui->lineEdit_5->text();
query1.addBindValue(idValue);
query1.exec(); //执行插入语句
query1.exec("select * from student"); //执行查询语句
query1.seek(-1); //回到初始位置,即第一个数据的前一个位置
close();
}
界面2UI界面
③界面智能家居服务系统
界面3.h文件
#ifndef CLIENT3_H
#define CLIENT3_H
#include <QWidget>
#include<QTcpSocket>
#include <QTcpSocket>
#include <QHostAddress>
#include"client1.h"
#include"client2.h"
#include<QTabWidget>
#include<QPixmap>
#include<QDebug>
#include <QVideoWidget>
#include<QCamera>
#include<QCameraInfo>
#include<QCameraImageCapture>
#include<QMediaPlayer>
#include<QMediaPlaylist>
#include<QStringList>
#include<QFileDialog>
#include<QMovie>
#include<QPixmap>
#include<QPainter>
#include <QTcpServer>
#include <QTcpSocket>
#include <QWidget>
#include <QListWidgetItem>
#include <QVideoWidget>
#include<QKeyEvent>
#include<QProcess>
namespace Ui {
class client3;
}
class client3 : public QWidget
{
Q_OBJECT
public:
explicit client3(QWidget *parent = 0);
~client3();
private slots:
void on_pushButton_25_clicked();
void on_pushButton_14_clicked();
void on_pushButton_13_clicked();
void clientDisConnect();
//接受数据
void readData();
//连接后响应的槽函数 connected信号
void connectServer();
void on_pushButton_38_clicked();
void on_pushButton_51_clicked();
void on_pushButton_81_clicked();
void on_pushButton_82_clicked();
void on_pushButton_24_clicked();
void on_pushButton_83_clicked();
void on_pushButton_53_clicked();
void on_pushButton_54_clicked();
void on_pushButton_84_clicked();
void on_pushButton_85_clicked();
void on_pushButton_86_clicked();
void on_pushButton_87_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_8_clicked();
void on_pushButton_9_clicked();
void on_pushButton_10_clicked();
void on_pushButton_11_clicked();
void on_pushButton_12_clicked();
void on_verticalSlider_sliderMoved(int position);
void on_horizontalSlider_sliderMoved(int position);
void on_pushButton_addvideo_clicked();
void on_pushButton_deletevideo_clicked();
void on_pushButton_clearvideo_clicked();
void on_pushButton_play_clicked();
void on_pushButton_cancel_clicked();
void on_pushButton_stop_cont_clicked();
void on_pushButton_prev_clicked();
void on_pushButton_stop_2_clicked();
void on_listw_doubleClicked(const QModelIndex &index);
private:
Ui::client3 *ui;
QTcpSocket* m_tcp;
QCamera* ca;
QVideoWidget* vw;
QCameraImageCapture* cap;
QMediaPlayer* player;
QMediaPlaylist* playlist;
//记录当前媒体周期
QString music_duration;
QString music_duratio;
//记录正在播放的视频
QString current_video;
QProcess *p;
QMediaPlayer* player1;
QMediaPlaylist* playlist1;
QString video_duration;
QString video_duratio;
};
#endif
界面3.c文件
#include "client3.h"
#include "ui_client3.h"
client3::client3(QWidget *parent) :
QWidget(parent),
ui(new Ui::client3)
{
ui->setupUi(this);
setWindowTitle(tr("小徐智能家居"));
m_tcp = new QTcpSocket(this);
ui->pushButton_14->setEnabled(true);
ui->pushButton_13->setEnabled(false);
//摄像头操作
QList<QCameraInfo> infos=QCameraInfo::availableCameras();
foreach (QCameraInfo info, infos)
{
ui->comboBox->addItem(info.deviceName());
}
//音乐播放器操作
player=new QMediaPlayer(this);
playlist=new QMediaPlaylist(this);
playlist->setPlaybackMode(QMediaPlaylist::Loop);
player->setPlaylist(playlist);
//视频播放器操作
player1=new QMediaPlayer(this);
playlist1=new QMediaPlaylist(this);
playlist1->setPlaybackMode(QMediaPlaylist::Loop);
player1->setPlaylist(playlist1);
vw=new QVideoWidget(this);
ui->horizontalLayout->addWidget(vw);
player1->setVideoOutput(vw);
//音乐播放器槽函数
connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(onPositionChanged(qint64)));
connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(onDurationChanged(qint64)));
//链接信号和槽
QObject::connect(player,&QMediaPlayer::durationChanged,this,[&](quint64 duration){
//周期改变(歌曲时间显示出来)
// 水平滑块 设置进度条范围 周期
ui->horizontalSlider->setRange(0,duration);
//文本显示歌曲周期,以字符串打印
music_duration=QString("%1:%2").arg(duration/1000/60).arg(duration/1000%60);
ui->label_5->setText(QString("%1").arg(music_duration));
//显示歌曲切换 当前歌曲 播放列表 当前时长
ui->listWidget->setCurrentRow(playlist->currentIndex());
});
//
QObject::connect(player,&QMediaPlayer::positionChanged,this,[&](quint64 position){
//进度改变(进度条的更新) 设置值 位置
ui->horizontalSlider->setValue(position);
//文本显示歌曲实时进度以字符串的形式打印
music_duratio=QString("%1:%2").arg(position/1000/60).arg(position/1000%60);
ui->label_12->setText(QString("%1").arg(music_duratio));
});
//视频播放器槽函数
connect(player1,SIGNAL(positionChanged(qint64)),this,SLOT(onPositionChanged(qint64)));
connect(player1,SIGNAL(durationChanged(qint64)),this,SLOT(onDurationChanged(qint64)));
//链接信号和槽
QObject::connect(player1,&QMediaPlayer::durationChanged,this,[&](quint64 duration){
//周期改变(歌曲时间显示出来)
// 水平滑块 设置进度条范围 周期
ui->horizontalSlider->setRange(0,duration);
//文本显示歌曲周期,以字符串打印
video_duration=QString("%1:%2:%3").arg(duration/1000/60/60)
.arg(duration/1000/60%60)
.arg(duration/1000%60);
ui->label_13->setText(QString("00:00:00/%1").arg(video_duration));
//显示歌曲切换 当前歌曲 播放列表 当前时长
ui->listWidget1->setCurrentRow(playlist1->currentIndex());
});
//
QObject::connect(player,&QMediaPlayer::positionChanged,this,[&](quint64 position){
//进度改变(进度条的更新) 设置值 位置
ui->horizontalSlider->setValue(position);
//文本显示歌曲实时进度以字符串的形式打印
// video_duratio=QString("%1:%2").arg(position/1000/60).arg(position/1000%60);
ui->label_12->setText(QString("%1;%2;%3/%4").arg(position/1000/60/60)
.arg(position/1000/60%60)
.arg(position/1000%60)
.arg(video_duratio));
});
p=new QProcess(this);
}
client3::~client3()
{
if(p->state()==QProcess::Running)
{
p->kill();
p->waitForFinished();
}
delete ui;
}
//连接服务器
void client3::on_pushButton_14_clicked()
{
//第二步:处理信号和槽断开的信号和槽
connect(m_tcp,&QTcpSocket::disconnected,this,clientDisConnect );
//第三步:调用connecttohost连接服务器
unsigned short port = ui->lineEdit_6->text().toShort();
QString ip = ui->lineEdit_5->text();
m_tcp->connectToHost(QHostAddress(ip),port );
// connectToHost(QHostAddress(ip),port);
//第四步:当连接成功会响应connected信号。
connect(m_tcp,&QTcpSocket::connected,this,&client3::connectServer );
//第五步: 响应readyread信号。准备接受数据。
connect(m_tcp,&QTcpSocket::readyRead,this,&client3::readData );
ui->pushButton_14->setEnabled(false);
ui->pushButton_13->setEnabled(true);
}
//断开连接
void client3::on_pushButton_13_clicked()
{
m_tcp->close();
ui->pushButton_14->setEnabled(true);
ui->pushButton_13->setEnabled(false);
}
//接受数据
void client3::readData()
{
QByteArray msg = m_tcp->readAll();
ui->textEdit->append(msg);
}
//连接后响应的槽函数 connected信号
void client3::connectServer()
{
ui->textEdit->append(tr("连接服务器成功..."));
}
//响应disconnect信号
void client3::clientDisConnect()
{
ui->textEdit->append("断开服务器...");
}
void client3::on_pushButton_25_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/dpk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/dpg.png");
static int a=1;
if(a==1)
{
ui->label_16->setPixmap(img);
ui->pushButton_25->setText(tr("关"));
QString msg = "厨房灯打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_16->setPixmap(omg);
ui->pushButton_25->setText(tr("开"));
QString msg = "厨房灯关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_38_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/fsk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/fsg.png");
static int a=1;
if(a==1)
{
ui->label_33->setPixmap(img);
ui->pushButton_38->setText(tr("关"));
QString msg = "厨房风扇打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_33->setPixmap(omg);
ui->pushButton_38->setText(tr("开"));
QString msg = "厨房风扇关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_51_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/dpk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/dpg.png");
static int a=1;
if(a==1)
{
ui->label_17->setPixmap(img);
ui->pushButton_51->setText(tr("关"));
QString msg = "餐厅灯打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_17->setPixmap(omg);
ui->pushButton_51->setText(tr("开"));
QString msg = "餐厅灯关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_81_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/dpk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/dpg.png");
static int a=1;
if(a==1)
{
ui->label_34->setPixmap(img);
ui->pushButton_81->setText(tr("关"));
QString msg = "卫生间灯打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_34->setPixmap(omg);
ui->pushButton_81->setText(tr("开"));
QString msg = "卫生间灯关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_82_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/fsk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/fsg.png");
static int a=1;
if(a==1)
{
ui->label_35->setPixmap(img);
ui->pushButton_82->setText(tr("关"));
QString msg = "卫生间风扇打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_35->setPixmap(omg);
ui->pushButton_82->setText(tr("开"));
QString msg = "卫生间风扇关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_24_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/dpk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/dpg.png");
static int a=1;
if(a==1)
{
ui->label_38->setPixmap(img);
ui->pushButton_24->setText(tr("关"));
QString msg = "次卧1灯打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_38->setPixmap(omg);
ui->pushButton_24->setText(tr("开"));
QString msg = "次卧1灯关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_83_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/dpk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/dpg.png");
static int a=1;
if(a==1)
{
ui->label_40->setPixmap(img);
ui->pushButton_83->setText(tr("关"));
QString msg = "次卧2灯打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_40->setPixmap(omg);
ui->pushButton_83->setText(tr("开"));
QString msg = "次卧2灯关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_53_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/dpk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/dpg.png");
static int a=1;
if(a==1)
{
ui->label_18->setPixmap(img);
ui->pushButton_53->setText(tr("关"));
QString msg = "书房灯打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_18->setPixmap(omg);
ui->pushButton_53->setText(tr("开"));
QString msg = "书房灯关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_54_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/fsk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/fsg.png");
static int a=1;
if(a==1)
{
ui->label_19->setPixmap(img);
ui->pushButton_54->setText(tr("关"));
QString msg = "卫生间风扇打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_19->setPixmap(omg);
ui->pushButton_54->setText(tr("开"));
QString msg = "卫生间风扇关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_84_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/dpk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/dpg.png");
static int a=1;
if(a==1)
{
ui->label_42->setPixmap(img);
ui->pushButton_84->setText(tr("关"));
QString msg = "客厅灯打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_42->setPixmap(omg);
ui->pushButton_84->setText(tr("开"));
QString msg = "客厅灯关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_85_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/fsk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/fsg.png");
static int a=1;
if(a==1)
{
ui->label_43->setPixmap(img);
ui->pushButton_85->setText(tr("关"));
QString msg = "客厅风扇打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_43->setPixmap(omg);
ui->pushButton_85->setText(tr("开"));
QString msg = "客厅风扇关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_86_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/dpk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/dpg.png");
static int a=1;
if(a==1)
{
ui->label_47->setPixmap(img);
ui->pushButton_86->setText(tr("关"));
QString msg = "主卧灯打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_47->setPixmap(omg);
ui->pushButton_86->setText(tr("开"));
QString msg = "主卧灯关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
void client3::on_pushButton_87_clicked()
{
QPixmap img=QPixmap(":/new/prefix1/ies/fsk.png");
QPixmap omg=QPixmap(":/new/prefix1/ies/fsg.png");
static int a=1;
if(a==1)
{
ui->label_48->setPixmap(img);
ui->pushButton_87->setText(tr("关"));
QString msg = "主卧风扇打开";
m_tcp->write(msg.toUtf8());
a=0;
}
else
{
ui->label_48->setPixmap(omg);
ui->pushButton_87->setText(tr("开"));
QString msg = "主卧风扇关闭";
m_tcp->write(msg.toUtf8());
a=1;
}
}
//打开摄像头
void client3::on_pushButton_3_clicked()
{
ca=new QCamera(ui->comboBox->currentText().toUtf8(),this);
cap=new QCameraImageCapture(ca,this);
QObject::connect(cap,&QCameraImageCapture::imageCaptured,this,[&](int id,const QImage &preview)
{
QPixmap map=QPixmap::fromImage(preview);
map=map.scaled(ui->label_4->size());
ui->label_4->setPixmap(map);
});
vw=new QVideoWidget(ui->widget);
vw->resize((ui->widget->size()));
ca->setViewfinder(vw);
vw->show();
ca->start();
ui->pushButton_3->setEnabled(false);
ui->pushButton_4->setEnabled(true);
ui->pushButton->setEnabled(true);
}
//关闭摄像头
void client3::on_pushButton_4_clicked()
{
ca->stop();
vw->hide();
delete ca;
delete vw;
ui->pushButton_3->setEnabled(true);
ui->pushButton_4->setEnabled(false);
ui->pushButton->setEnabled(false);
}
//拍照
void client3::on_pushButton_clicked()
{
cap->capture();
}
//保存
void client3::on_pushButton_2_clicked()
{
QString lj=ui->lineEdit_4->text();
cap->capture(lj);
}
//添加音乐
void client3::on_pushButton_5_clicked()
{
QStringList music_files = QFileDialog::getOpenFileNames(this,"选择音乐文件","C:/Users/86186/Documents/client/mucia");
//去重
for(int i = 0;i<ui->listWidget->count();i++)
{
for(int j = 0;j<music_files.count();j++)
{
if(ui->listWidget->item(i)->text()==music_files.at(j))
{
music_files.removeAt(j);
break;
}
}
}
if(music_files.isEmpty())
return ;
for(int i = 0;i<music_files.count();i++)
{
QString file = music_files.at(i);
//文件加到播放列表
playlist->addMedia(QUrl::fromLocalFile(file));
}
ui->listWidget->addItems(music_files);
ui->listWidget->setCurrentRow(0);
}
//删除音乐
void client3::on_pushButton_6_clicked()
{
int row = ui->listWidget->currentRow();
QListWidgetItem* item = ui->listWidget->takeItem(row);
if(item)
{
delete item;
}
playlist->removeMedia(row);
}
//清空音乐
void client3::on_pushButton_7_clicked()
{
ui->listWidget->clear();
playlist->clear();
}
//播放
void client3::on_pushButton_8_clicked()
{
int row=ui->listWidget->currentRow();
playlist->setCurrentIndex(row);
player->play();
player->setVolume(ui->verticalSlider->value());
ui->pushButton_10->setText(tr("暂停"));
ui->pushButton_10->setEnabled(true);
}
//重播
void client3::on_pushButton_9_clicked()
{
player->stop();
ui->pushButton_10->setText(tr("暂停"));
ui->pushButton_10->setEnabled(false);
}
//暂停
void client3::on_pushButton_10_clicked()
{
if(player->state()==QMediaPlayer::PlayingState)
{
player->pause();
ui->pushButton_10->setText(tr("继续"));
}
else if(player->state()==QMediaPlayer::PausedState)
{
player->play();
ui->pushButton_10->setText(tr("暂停"));
}
}
//上一首
void client3::on_pushButton_11_clicked()
{
int row=ui->listWidget->currentRow();
if(row==0)
row=ui->listWidget->count();
else
row--;
ui->listWidget->setCurrentRow(row);
playlist->setCurrentIndex(row);
player->play();
player->setVolume(ui->verticalSlider->value());
ui->pushButton_10->setText(tr("暂停"));
ui->pushButton_10->setEnabled(true);
}
//下一首
void client3::on_pushButton_12_clicked()
{
int row=ui->listWidget->currentRow();
if(row==ui->listWidget->count()-1)
row=0;
else
row++;
ui->listWidget->setCurrentRow(row);
playlist->setCurrentIndex(row);
player->play();
player->setVolume(ui->verticalSlider->value());
ui->pushButton_10->setText(tr("暂停"));
ui->pushButton_10->setEnabled(false);
}
//音乐音量大小
void client3::on_verticalSlider_sliderMoved(int position)
{
player->setVolume(position);
ui->label_6->setText(QString("音量:%1").arg(position));
}
//音乐进度条
void client3::on_horizontalSlider_sliderMoved(int position)
{
player->setPosition(position);
}
//添加视频
void client3::on_pushButton_addvideo_clicked()
{
QStringList video_files = QFileDialog::getOpenFileNames(this,"选择视频文件","C:/Users/86186/Documents/client/video","*.mp4 *.avi");
//去重
for(int i = 0;i<ui->listWidget1->count();i++)
{
for(int j = 0;j<video_files.count();j++)
{
if(ui->listWidget1->item(i)->text()==video_files.at(j))
{
video_files.removeAt(j);
break;
}
}
}
if(video_files.isEmpty())
return ;
for(int i = 0;i<video_files.count();i++)
{
QString file =video_files.at(i);
//文件加到播放列表
playlist1->addMedia(QUrl::fromLocalFile(file));
}
ui->listWidget1->addItems(video_files);
ui->listWidget1->setCurrentRow(0);
}
//删除视频
void client3::on_pushButton_deletevideo_clicked()
{
int row = ui->listWidget1->currentRow();
QListWidgetItem* item = ui->listWidget1->takeItem(row);
if(item)
{
delete item;
}
playlist1->removeMedia(row);
}
//清空视频
void client3::on_pushButton_clearvideo_clicked()
{
ui->listWidget1->clear();
playlist1->clear();
}
//播放视频
void client3::on_pushButton_play_clicked()
{
int row=ui->listWidget1->currentRow();
playlist1->setCurrentIndex(row);
player1->play();
player1->setVolume(ui->verticalSlider->value());
ui->pushButton_stop_cont->setText(tr("暂停"));
ui->pushButton_stop_cont->setEnabled(true);
}
//重播视频
void client3::on_pushButton_cancel_clicked()
{
player1->stop();
ui->pushButton_stop_cont->setText(tr("暂停"));
ui->pushButton_stop_cont->setEnabled(false);
//ui->lablee->clear();
}
//暂停视频
void client3::on_pushButton_stop_cont_clicked()
{
QString cmd="killall";
QStringList args;
if(ui->pushButton_stop_cont->text()=="暂停")
{
args<<"-STOP"<<"mplayer";
ui->pushButton_stop_cont->setText("继续");
}
else
{
args<<"-CONT"<<"mplayer";
ui->pushButton_stop_cont->setText("暂停");
}
p->execute(cmd,args);
}
//上一个视频
void client3::on_pushButton_prev_clicked()
{
int row=ui->listWidget1->currentRow();
if(row==0)
row=ui->listWidget1->count();
else
row--;
ui->listWidget1->setCurrentRow(row);
playlist1->setCurrentIndex(row);
player1->play();
player1->setVolume(ui->verticalSlider->value());
ui->pushButton_stop_cont->setText(tr("暂停"));
ui->pushButton_stop_cont->setEnabled(true);
}
//下一个视频
void client3::on_pushButton_stop_2_clicked()
{
int row=ui->listWidget1->currentRow();
if(row==ui->listWidget1->count()-1)
row=0;
else
row++;
ui->listWidget1->setCurrentRow(row);
playlist1->setCurrentIndex(row);
player1->play();
player1->setVolume(ui->verticalSlider->value());
ui->pushButton_stop_cont->setText(tr("暂停"));
ui->pushButton_stop_cont->setEnabled(false);
}
//双击播放
void client3::on_listw_doubleClicked(const QModelIndex &index)
{
int row = ui->listWidget1->currentRow();
playlist1->setCurrentIndex(row);
player->play();
player->setVolume(ui->verticalSlider->value());
ui->pushButton_stop_cont->setText(tr("暂停"));
ui->pushButton_stop_cont->setEnabled(true);
}
界面3UI界面
此处注意需要配置资源文件
四、启动后界面
我所使用的在代码中的都是动图
文章来源:https://www.toymoban.com/news/detail-503719.html
总体的项目就是这样,希望对于一些人有所帮助! 文章来源地址https://www.toymoban.com/news/detail-503719.html
到了这里,关于qt实现智能家居系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!