先规划好做什么功能,接下来我们走一步介绍一步,第一肯定要是登录界面,规范好。界面可以添加背景图,我就省略了这个,直接就是简易版,账号密码在代码中固定死,然后用IF判断如果正确,则显示登录成功。界面制作我是用手拖方式进行制作,没用手写代码实现,
![](https://img-blog.csdnimg.cn/img_convert/c079f62e341d533b698877e3432e6ca1.png)
用if判断,然后进行密码加密,
![](https://img-blog.csdnimg.cn/img_convert/db79f2219fc0bd558911b75d2389f5b9.png)
界面制作后,接下来就是控制小灯,风扇等,
如图所示,我点击相对于的开关,灯或者风扇就会有反应,这我用的是图片切换,具体什么意思呢,请看下下代码
![](https://img-blog.csdnimg.cn/img_convert/bea5f09645251b44f3240cba685107df.png)
我就直接用if判,如果我按了开,就会显示第一张图片,当我在此按下就会显示关,就会显示另外关的图片,就起到了开关的效果,当然其余的都是这样,所有的线,图片,按钮,都是拖的,自己手写也可以,手写的优点就是随心随意,但是效率较低,比较慢。而且,对准位置参数,对我来说很费时。
![](https://img-blog.csdnimg.cn/img_convert/68ace7e0b4ff4bdc2236605023b05a74.png)
接下来就是视频监控
当我开启视频就是这样子,调用摄像头,进行拍照保存,我这个截图拍照保存整合在一个槽函数内了,
![](https://img-blog.csdnimg.cn/img_convert/0b29109bd0587062cc12d41995e08003.png)
![](https://img-blog.csdnimg.cn/img_convert/6e90c39391c236e61c6756400ecf6265.png)
如下代码,F:\\luping是保存照片的路径
![](https://img-blog.csdnimg.cn/img_convert/2a16e72dd58c40b11e4c8e043a683615.png)
音乐播放器:
先去下载MP3歌曲,存入指定文件,然后添加按钮,就会打开文件夹,添加指定文件歌曲,然后播放,歌曲,下一首,上一首,由槽函数进行连接。
![](https://img-blog.csdnimg.cn/img_convert/6efa72c654aba613cc743b11d91753b5.png)
![](https://img-blog.csdnimg.cn/img_convert/a1c4c06a687c20bfc2bd96484b7304fc.png)
TCP连接;客户端连接服务端
我服务端先打开,然后,客户端进行连接,连接成功客户端先给服务端发送ip地址,提醒服务端客服端上线,然后就可以进行数据接收,然后服务端通过客户端发来的数据对我的开关进行操作,这就实现了客户端对服务端的操作。
![](https://img-blog.csdnimg.cn/img_convert/31dab6ebeb10fe49ffdfd4919a6b560e.png)
以下就是整个服务端代码。
![](https://img-blog.csdnimg.cn/img_convert/34871d7af6944e2c6530d4f9db47c6b9.png)
下面是显示文本日期以及时间的代码
![](https://img-blog.csdnimg.cn/img_convert/5614e146b8291591d8d1e0ddce447679.png)
//这是界面代码(Mainwindow.h)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_checkBox_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//这是界面的MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "znjj_2.h"
#include <QMessageBox>
#include <QMenu>
#include <QAction>
#include <QToolBar>
#include <QDatetime>
#include <QString>
#include <QIODevice>
#include <QFileDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QDebug>
#include <QLabel>
#include <QApplication>
#include <QPainter>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QDateTime time=QDateTime::currentDateTime();
QString timeStr=time.toString("yyyy-MM-dd hh:mm:ss");
qDebug()<<timeStr<<endl;
// 标签
QLabel* linelabel = new QLabel("行");
ui->statusBar->addWidget(linelabel);
QLabel* rowlabel = new QLabel("列");
ui->statusBar->addWidget(rowlabel);
QLabel* curtime = new QLabel(timeStr);
ui->statusBar->addWidget(curtime);
QLabel* label4 = new QLabel("100% ");
ui->statusBar->addWidget(label4);
QLabel* label5 = new QLabel("Windows ");
ui->statusBar->addWidget(label5);
QLabel* label6 = new QLabel("UTF-8 </a>");
ui->statusBar->addWidget(label6);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
if(ui->lineEdit_2->text() == "1" && ui->lineEdit->text() =="1")
{
QMessageBox::information(this,"提示","登录成功");
this->close();
znjj_2* b = new znjj_2();
b->show();
}
else
{
QMessageBox::information(this,"提示","登录失败");
}
}
//密码加密
void MainWindow::on_checkBox_clicked()
{
if(ui->checkBox->isChecked())
{
ui->lineEdit->setEchoMode(ui->lineEdit->Password);
}
else
{
ui->lineEdit->setEchoMode(ui->lineEdit->Normal);
}
}
//这是.cpp实现的全部代码(znjj_2.cpp)
#include "znjj_2.h"
#include "ui_znjj_2.h"
#include <QPainter>
#include <QPen>
#include <QMovie>
#include <QPixmap>
#include <QVideoWidget>
#include <QCamera>
#include <QCameraInfo>
#include <QDir>
#include <QDebug>
#include <QFileDialog>
#include <QTableWidget>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QStringList>
#include <QFileDialog>
znjj_2::znjj_2(QWidget *parent) :
QWidget(parent),
ui(new Ui::znjj_2)
{
ui->setupUi(this);
setWindowTitle(tr("服务器"));//服务端
//音乐播放器
player = new QMediaPlayer(this);
playlist = new QMediaPlaylist;
playlist->addMedia(QUrl("F:\\QT111\\music\\lone.mp3"));
playlist->setPlaybackMode(QMediaPlaylist::Loop);
player->setPlaylist(playlist);
QList<QCameraInfo> infos2 = QCameraInfo::availableCameras();
foreach (QCameraInfo info, infos2)
{
qDebug()<<info.deviceName()<<":"<<info.description();
ui->comboBox->addItem(info.deviceName());
}
}
znjj_2::~znjj_2()
{
delete ui;
}
//厨房灯按钮
void znjj_2::on_pushButton_clicked()
{
if(ui->pushButton->isCheckable()){ //切换按钮状态
ui->pushButton->setCheckable(false);
}else{
ui->pushButton->setCheckable(true);
}
if(ui->pushButton->isCheckable()){ //切换按钮标签字
ui->pushButton->setText("开");
ui->label_10->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
}else{
ui->pushButton->setText("关");
ui->label_10 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
}
}
//厨房风扇按钮
void znjj_2::on_pushButton_13_clicked()
{
if(ui->pushButton_13->isCheckable()){ //切换按钮状态
ui->pushButton_13->setCheckable(false);
}else{
ui->pushButton_13->setCheckable(true);
}
if(ui->pushButton_13->isCheckable()){ //切换按钮标签字
ui->pushButton_13->setText("开");
ui->label_11->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));
}else{
ui->pushButton_13->setText("关");
ui->label_11 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
}
}
//餐厅开关
void znjj_2::on_pushButton_3_clicked()
{
if(ui->pushButton_3->isCheckable()){ //切换按钮状态
ui->pushButton_3->setCheckable(false);
}else{
ui->pushButton_3->setCheckable(true);
}
if(ui->pushButton_3->isCheckable()){ //切换按钮标签字
ui->pushButton_3->setText("开");
ui->label_12->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
}else{
ui->pushButton_3->setText("关");
ui->label_12 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
}
}
//卫生间灯光按钮
void znjj_2::on_pushButton_17_clicked()
{
if(ui->pushButton_17->isCheckable()){ //切换按钮状态
ui->pushButton_17->setCheckable(false);
}else{
ui->pushButton_17->setCheckable(true);
}
if(ui->pushButton_17->isCheckable()){ //切换按钮标签字
ui->pushButton_17->setText("开");
ui->label_13->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
}else{
ui->pushButton_17->setText("关");
ui->label_13 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
}
}
//卫生间风扇按钮
void znjj_2::on_pushButton_18_clicked()
{
if(ui->pushButton_18->isCheckable()){ //切换按钮状态
ui->pushButton_18->setCheckable(false);
}else{
ui->pushButton_18->setCheckable(true);
}
if(ui->pushButton_18->isCheckable()){ //切换按钮标签字
ui->pushButton_18->setText("开");
ui->label_14->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));
}else{
ui->pushButton_18->setText("关");
ui->label_14 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
}
}
//次卧1灯开关按钮
void znjj_2::on_pushButton_19_clicked()
{
if(ui->pushButton_19->isCheckable()){ //切换按钮状态
ui->pushButton_19->setCheckable(false);
}else{
ui->pushButton_19->setCheckable(true);
}
if(ui->pushButton_19->isCheckable()){ //切换按钮标签字
ui->pushButton_19->setText("开");
ui->label_15->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
}else{
ui->pushButton_19->setText("关");
ui->label_15 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
}
}
//次卧2灯光按钮
void znjj_2::on_pushButton_20_clicked()
{
if(ui->pushButton_20->isCheckable()){ //切换按钮状态
ui->pushButton_20->setCheckable(false);
}else{
ui->pushButton_20->setCheckable(true);
}
if(ui->pushButton_20->isCheckable()){ //切换按钮标签字
ui->pushButton_20->setText("开");
ui->label_16->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
}else{
ui->pushButton_20->setText("关");
ui->label_16 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
}
}
//书房灯开关按钮
void znjj_2::on_pushButton_14_clicked()
{
if(ui->pushButton_14->isCheckable()){ //切换按钮状态
ui->pushButton_14->setCheckable(false);
}else{
ui->pushButton_14->setCheckable(true);
}
if(ui->pushButton_14->isCheckable()){ //切换按钮标签字
ui->pushButton_14->setText("开");
ui->label_17->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
}else{
ui->pushButton_14->setText("关");
ui->label_17 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
}
}
//书房风扇开关按钮
void znjj_2::on_pushButton_15_clicked()
{
if(ui->pushButton_15->isCheckable()){ //切换按钮状态
ui->pushButton_15->setCheckable(false);
}else{
ui->pushButton_15->setCheckable(true);
}
if(ui->pushButton_15->isCheckable()){ //切换按钮标签字
ui->pushButton_15->setText("开");
ui->label_18->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));
}else{
ui->pushButton_15->setText("关");
ui->label_18 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
}
}
//客厅灯光按钮
void znjj_2::on_pushButton_16_clicked()
{
if(ui->pushButton_16->isCheckable()){ //切换按钮状态
ui->pushButton_16->setCheckable(false);
}else{
ui->pushButton_16->setCheckable(true);
}
if(ui->pushButton_16->isCheckable()){ //切换按钮标签字
ui->pushButton_16->setText("开");
ui->label_19->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
}else{
ui->pushButton_16->setText("关");
ui->label_19 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
}
}
//客厅风扇开关按钮
void znjj_2::on_pushButton_23_clicked()
{
if(ui->pushButton_23->isCheckable()){ //切换按钮状态
ui->pushButton_23->setCheckable(false);
}else{
ui->pushButton_23->setCheckable(true);
}
if(ui->pushButton_23->isCheckable()){ //切换按钮标签字
ui->pushButton_23->setText("开");
ui->label_20->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));
}else{
ui->pushButton_23->setText("关");
ui->label_20 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
}
}
//主卧灯光按钮
void znjj_2::on_pushButton_21_clicked()
{
if(ui->pushButton_21->isCheckable()){ //切换按钮状态
ui->pushButton_21->setCheckable(false);
}else{
ui->pushButton_21->setCheckable(true);
}
if(ui->pushButton_21->isCheckable()){ //切换按钮标签字
ui->pushButton_21->setText("开");
ui->label_21->setPixmap(QPixmap(":/new/prefix1/C:/Users/daizhifei/Pictures/Screenshots/开灯图片.png"));
}else{
ui->pushButton_21->setText("关");
ui->label_21 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/Screenshots/灯灭图片.png"));
}
}
//主卧风扇按钮
void znjj_2::on_pushButton_22_clicked()
{
if(ui->pushButton_22->isCheckable()){ //切换按钮状态
ui->pushButton_22->setCheckable(false);
}else{
ui->pushButton_22->setCheckable(true);
}
if(ui->pushButton_22->isCheckable()){ //切换按钮标签字
ui->pushButton_22->setText("开");
ui->label_22->setPixmap(QPixmap("://C:/Users/daizhifei/Pictures/动态风扇.gif"));
}else{
ui->pushButton_22->setText("关");
ui->label_22 ->setPixmap(QPixmap(":/C:/Users/daizhifei/Pictures/风扇动图.gif"));
}
}
//视频
void znjj_2::on_start_clicked()
{
ca2 = new QCamera(ui->comboBox->currentText().toUtf8(),this);
ui->widget_2->show();
capture2 = new QCameraImageCapture(ca2);
connect(capture2,SIGNAL(imageCaptured(int,QImage)),this,SLOT(show_pic(int,QImage)));
QCameraViewfinder *v2 = new QCameraViewfinder(ui->widget_2);
v2->resize(ui->widget_2->size());
ca2->setViewfinder(ui->widget_2);
v2->show();
ca2->start();
}
//暂停
void znjj_2::on_stop_clicked()
{
ca2->stop();
ui->widget_2->hide();
}
//保存
void znjj_2::on_pushButton_6_clicked()
{
capture2->capture("F:\\luping");
}
void znjj_2::show_pic(int id,const QImage &preview)
{
qDebug()<<id;
QPixmap pix = QPixmap::fromImage(preview);
pix = pix.scaled(ui->label_25->size());
ui->label_25->setPixmap(pix);
}
//添加
void znjj_2::on_pushButton_26_clicked()
{
QStringList music_files=QFileDialog::getOpenFileNames(this,"选择音乐文件","F:/QT111/music/lone.mp3");
//去重
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 znjj_2::on_pushButton_24_clicked()
{
if(player->state()==QMediaPlayer::PlayingState)
{
//暂停
player->pause();
ui->pushButton_24->setText("继续");
}
else if(player->state()==QMediaPlayer::PausedState)
{
//继续
player->play();
ui->pushButton_24->setText("暂停");
}
}
//上一曲
void znjj_2::on_pushButton_9_clicked()
{
int row = ui->listWidget->currentRow();
if(row == 0)
row = ui->listWidget->count();
row--;
ui->listWidget->setCurrentRow(row);
//设置playlist
playlist->setCurrentIndex(row);
player->play();
player->setVolume(ui->verticalSlider->value());
ui->pushButton_24->setText("暂停");
ui->pushButton_24->setEnabled(true);
}
//下一曲
void znjj_2::on_pushButton_8_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_24->setText("暂停");
ui->pushButton_24->setEnabled(true);
}
//删除
void znjj_2::on_pushButton_27_clicked()
{
int row = ui->listWidget->currentRow();
QListWidgetItem* item = ui->listWidget->takeItem(row);
if(item)
{
delete item;
}
playlist->removeMedia(row);
}
//清空
void znjj_2::on_pushButton_28_clicked()
{
ui->listWidget->clear();
playlist->clear();
}
//播放
void znjj_2::on_pushButton_5_clicked()
{
int row = ui->listWidget->currentRow();
playlist->setCurrentIndex(row);
player->play();
player->setVolume(ui->verticalSlider->value());
ui->pushButton_24->setText("暂停");
ui->pushButton_24->setEnabled(true);
}
//声音文本
void znjj_2::on_verticalSlider_sliderMoved(int position)
{
player->setVolume(position);
ui->label_vol->setText(QString("音量:%1").arg(position));
//ui->label_vol->setText(QString("音量:%1").arg(position));
}
void znjj_2::on_horizontalSlider_sliderMoved(int position)
{
player->setPosition(position);
//ui->label_vol->setText(QString("音量:%1").arg(pos));
}
//双击播放
void znjj_2::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
int row = ui->listWidget->currentRow();
playlist->setCurrentIndex(row);
player->play();
player->setVolume(ui->verticalSlider->value());
ui->pushButton_24->setText("暂停");
ui->pushButton_24->setEnabled(true);
}
//启动服务器
void znjj_2::on_pushButton_4_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,&znjj_2::ClientConnect);
// nextpendingconnction函数可以获取到客户端的socket,也就是QTCPsocket对象
//第四步:如果连接上了,设置按钮为灰色
ui->pushButton_4->setEnabled(false);
}
//客户端连接后响应
void znjj_2::ClientConnect()
{
//返回客户端的tcp
m_tcp = m_server->nextPendingConnection();
//打印下客户端的ip地址
QHostAddress addr = m_tcp->peerAddress();
ui->textEdit->append(addr.toString());
connect(m_tcp,&QTcpSocket::readyRead,this,&znjj_2::readData );
connect(m_tcp,&QTcpSocket::disconnected ,this,&znjj_2::Clientdisconnect );
}
//发送
void znjj_2::on_pushButton_7_clicked()
{
//使用write函数,QTcpsocket对象
QString temp = ui->textEdit_2->toPlainText();//获取textedit的文本
char buf[128]={0};
m_tcp->write(buf);
if(strlen(buf) != 0 )
{
ui->textEdit->append(buf);
}
ui->textEdit_2->clear();
}
//服务器接受数据
void znjj_2::readData()
{
QString temp = m_tcp->readAll();
if(!temp.isNull())
{
ui->textEdit->append(temp);
}
}
//客户端断开连接
void znjj_2::Clientdisconnect()
{
ui->textEdit->append("客户端断开连接");
m_tcp->close();
ui->pushButton->setEnabled(true);
}
//这是智能家居主要.h代码(znjj_2)
#ifndef ZNJJ_2_H
#define ZNJJ_2_H
#include <QWidget>
#include <QCameraInfo>
#include <QCamera>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QPixmap>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMediaPlaylist>
#include <QStringList>
#include <QDir>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QListWidgetItem>
namespace Ui {
class znjj_2;
}
class znjj_2 : public QWidget
{
Q_OBJECT
public:
explicit znjj_2(QWidget *parent = 0);
~znjj_2();
QTcpServer* m_server;//服务器对象
QTcpSocket* m_tcp;//客户端对象
void paintEvent(const QEvent* event);
private slots:
void on_pushButton_clicked();
void on_pushButton_13_clicked();
void on_pushButton_3_clicked();
void on_pushButton_17_clicked();
void on_pushButton_18_clicked();
void on_pushButton_19_clicked();
void on_pushButton_20_clicked();
void on_pushButton_14_clicked();
void on_pushButton_15_clicked();
void on_pushButton_16_clicked();
void on_pushButton_23_clicked();
void on_pushButton_21_clicked();
void on_pushButton_22_clicked();
void on_pushButton_6_clicked();
void on_pushButton_8_clicked();
void on_start_clicked();
void on_stop_clicked();
void show_pic(int id,const QImage &preview);
void addItem(QString name);//添加tableWidget
//点击连接服务器
void on_pushButton_4_clicked();
void ClientConnect();
void readData();
// void Clientdisconnect();
void on_pushButton_5_clicked();
void on_pushButton_9_clicked();
//void on_pushButton_25_clicked();
//void on_pushButton_7_clicked();
void on_pushButton_26_clicked();
void on_pushButton_24_clicked();
void on_pushButton_27_clicked();
void on_pushButton_28_clicked();
void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
void on_verticalSlider_sliderMoved(int position);
void on_horizontalSlider_sliderMoved(int position);
void on_verticalSlider_valueChanged(int value);
void on_textEdit_destroyed();
void on_pushButton_7_clicked();
void Clientdisconnect();
private:
Ui::znjj_2 *ui;
// QTcpSocket* m_tcp;
QCamera* ca2;
QCameraImageCapture* capture2;
//Ui::znjj_2 *ui;
//播放器
QMediaPlayer* player;
//播放列表
QMediaPlaylist* playlist;
//记录当前媒体周期
QString music_duration;
};
#endif // ZNJJ_2_H