#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QFile>
#include "commondef.h"
#include "messagebox.h"
#define TIME_NOW QDateTime::currentDateTime().toString("yyyyMMddhhmmss")
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow), m_renameDlg(RenameDialog::instance()),
m_createDevDlg(createDevDialog::instance()),
m_mediaDlg(MediaDialog::instance())
{
ui->setupUi(this);
QString sTitle = QString("My Device Emap-V%1").arg(SOFTWARE_VERSION);
this->setWindowTitle(sTitle);
initTree();
initMap();
QTimer::singleShot(5000, this, SLOT(on_timeout()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initTree()
{
ui->dev_tree->clear();
ui->dev_tree->setDragDropMode(QAbstractItemView::DragDrop);
ui->dev_tree->setDefaultDropAction(Qt::MoveAction);
connect(ui->dev_tree, &QCTreeWidget::sig_devSelectItem,
this, &MainWindow::on_devSelectItem);
connect(ui->dev_tree, &QCTreeWidget::sig_deleteGroup,
this, &MainWindow::on_deleteGroup);
connect(ui->dev_tree, &QCTreeWidget::sig_deleteDev,
this, &MainWindow::on_deleteDev);
connect(ui->dev_tree, &QCTreeWidget::sig_renameDev,
this, &MainWindow::on_renameDev);
connect(ui->dev_tree, &QCTreeWidget::sig_renameGroup,
this, &MainWindow::on_renameGroup);
connect(ui->dev_tree, &QCTreeWidget::sig_newGroup,
this, &MainWindow::on_createGroup);
connect(ui->dev_tree, &QCTreeWidget::sig_moveDevSrc,
this, &MainWindow::on_devMoveSrc);
connect(ui->dev_tree, &QCTreeWidget::sig_moveDevDst,
this, &MainWindow::on_devMoveDst);
connect(ui->dev_tree, &QCTreeWidget::sig_createDev,
this, &MainWindow::on_createDev);
connect(&m_renameDlg, SIGNAL(sig_rename(int,QString,QString)),
this, SLOT(on_devRenameResult(int,QString,QString)));
connect(this, SIGNAL(sig_devUpdateTree()),
this, SLOT(on_devUpdateTree()));
qRegisterMetaType<DB_DEV_T>("DB_DEV_T");
connect(&m_createDevDlg, SIGNAL(sig_createDev(DB_DEV_T)),
this, SLOT(on_createDbDev(DB_DEV_T)));
connect(ui->dev_tree, SIGNAL(sig_playDev(QString,QString,QString)),
&m_mediaDlg, SLOT(slot_playDev(QString,QString,QString)));
connect(ui->dev_tree, SIGNAL(sig_stopDev(QString)),
&m_mediaDlg, SLOT(slot_stopDev(QString)));
connect(ui->dev_tree, &QCTreeWidget::itemDoubleClicked,
this, &MainWindow::on_devDBClick);
connect(this, SIGNAL(sig_playDev(QString,QString,QString)),
&m_mediaDlg, SLOT(slot_playDev(QString,QString,QString)));
initTreeData();
}
static void insertGroup(void* pUser, void* pData)
{
QHashDBGroup* h = (QHashDBGroup*)pUser;
DB_GROUP_T g = *((DB_GROUP_T*)pData);
h->insert(g.gid, g);
}
static void insertDevice(void* pUser, void* pData)
{
QHashDBDev* h = (QHashDBDev*)pUser;
DB_DEV_T v = *((DB_DEV_T*)pData);
h->insert(v.sMac, v);
}
void MainWindow::initTreeData()
{
m_groupMap.clear(); // clean all old.
if(MyDb::instance().db_dev_get_all_group(&m_groupMap, insertGroup))
{
return;
}
m_devMap.clear();
if(MyDb::instance().db_dev_get_all_dev(&m_devMap, insertDevice))
{
return;
}
emit sig_devUpdateTree();
}
void MainWindow::addTreeSubItem(QTreeWidgetItem *parent, const QString sGroupName)
{
if(!parent || sGroupName.isEmpty())
return;
QHashDBDevIterator iter = m_devMap.begin();
for(; iter != m_devMap.constEnd(); iter++)
{
DB_DEV_T& stDev = iter.value();
if(0 == stDev.sGroupName.compare(sGroupName))
{
QStringList list_name;
list_name << stDev.sDevName;
QTreeWidgetItem *item = new QTreeWidgetItem(parent, list_name);
item->setData(0, ROLE_MAC, stDev.sMac);
item->setData(0, ROLE_GID, QVariant(stDev.gid));
item->setData(0, ROLE_IP, stDev.sIp);
item->setData(0, ROLE_STREAM, stDev.sStream);
item->setData(0, Qt::WhatsThisRole, QVariant("stDev"));
}
}
}
void MainWindow::delTreeSubItem(QTreeWidgetItem *parent)
{
if(!parent)
return;
// 1. get all device.
int nCount = parent->childCount();
for(int i = 0; i < nCount; i++)
{
QTreeWidgetItem *item = parent->child(i);
QString sMac = item->data(0, ROLE_MAC).toString();
m_devMap.remove(sMac);
MyDb::instance().db_dev_del_dev(sMac);
}
}
int MainWindow::checkDBDevName(QString &sName)
{
QHashDBDevIterator i = m_devMap.begin();
for(; i != m_devMap.end(); i++)
{
if(i.value().sDevName.compare(sName) == 0)
{
return 1; // 相等
}
}
return 0;
}
int MainWindow::checkDBGroupName(QString &sName)
{
QHashDBGroupIterator i = m_groupMap.begin();
for(; i != m_groupMap.end(); i++)
{
if(i.value().sGroupName.compare(sName) == 0)
{
return 1;
}
}
return 0;
}
void MainWindow::initMap()
{
QString htmlPath = QCoreApplication::applicationDirPath() + "/web/";
QString htmlFile = htmlPath + "map.html";
MY_DEBUG << htmlFile;
QFile file(htmlFile);
if(!file.exists())
{
MY_DEBUG << "file is not existed.";
return;
}
m_document.setUi(ui);
QWebChannel *webChannel = new QWebChannel(this);
webChannel->registerObject(QString("JSInterface"), &m_document);
ui->widget->page()->setWebChannel(webChannel);
//加载网页
ui->widget->page()->load(QUrl("file:///" + htmlFile));
connect(&m_document, SIGNAL(sig_playStream(QString)),
this, SLOT(on_playStream(QString)));
connect(&m_document, SIGNAL(sig_playStream2(QString)),
this, SLOT(on_playStream2(QString)));
}
void MainWindow::initMaker()
{
QString sCmd;
sCmd = "deleteAllMarker()";
ui->widget->page()->runJavaScript(sCmd);
QHashDBDevIterator iter = m_devMap.begin();
for(; iter != m_devMap.constEnd(); iter++)
{
DB_DEV_T& stDev = iter.value();
sCmd = QString("addMarker(%1,%2,'%3','%4','%5')").arg(stDev.sLon).arg(stDev.sLat).arg(stDev.sIp).\
arg(stDev.sSnap).arg(stDev.sMac);
MY_DEBUG << sCmd;
ui->widget->page()->runJavaScript(sCmd);
}
}
void MainWindow::on_devSelectItem(QString sMac)
{
if(m_devMap.contains(sMac))
{
QString sZoom = ui->lineEdit_zoom->text();
QString sCmd = QString("locationByLngLat(%1, %2, %3)").arg(m_devMap[sMac].sLon).arg(m_devMap[sMac].sLat).arg(sZoom);
MY_DEBUG << sCmd;
ui->widget->page()->runJavaScript(sCmd);
}
}
void MainWindow::on_devUpdateTree()
{
// 1. clean old.
ui->dev_tree->clear();
ui->dev_tree->clearFocus();
//ui->dev_tree->setIconSize(QSize(24, 24));
if(m_groupMap.isEmpty())
{
return;
}
// 2. update group information.
QHashDBGroupIterator iter = m_groupMap.begin();
for(; iter != m_groupMap.end(); iter++)
{
const QString folder_name = iter.value().sGroupName;
QStringList list_name;
list_name << folder_name;
QTreeWidgetItem *item = new QTreeWidgetItem(ui->dev_tree, list_name);
//item->setIcon(0, QIcon(":/LiveVideo/folder"));
item->setData(0, ROLE_MAC, QVariant(folder_name));
item->setData(0, ROLE_GID, QVariant(iter.value().gid)); // fold id.
item->setData(0, Qt::WhatsThisRole, QVariant("Group"));
item->setExpanded(true); // 默认扩展
// 3. update device infoamtion.
addTreeSubItem(item, folder_name);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
QT开发的摄像头电子地图Demo(采用百度地图),工程源码下载
共469个文件
h:341个
lib:33个
a:18个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 2 浏览量
2023-11-08
10:52:50
上传
评论 1
收藏 19.3MB RAR 举报
温馨提示
本软件的工程是在QT-5.8 32位下开发,可以支持其他qtcreator 32位版本(用32位是因为视频播放的码流库是32位)。工程采用的地图是百度地图,需要在百度地图开发者网站上注册账号,并获取到密钥。本工程数据库采用sqlite db,数据库中存储的摄像头是我本地局域网上的摄像头,可以手动更改数据库的设备信息,也可以通过界面右键菜单删除设备,后重新创建设备。软件功能有:可通过右键菜单:创建组、删除组、重命名组、创建设备、右键设备--播放设备、停止播放、重命名设备,删除设备,支持设备拖动到其他组,支持选中设备,地图跳转到该设备,显示当前鼠标经纬度,支持放大级别配置,支持地点定位,支持添加和删除地图标注点,信息弹出框显示信息及播放视频操作。
资源推荐
资源详情
资源评论
收起资源包目录
QT开发的摄像头电子地图Demo(采用百度地图),工程源码下载 (469个子文件)
libavcodec.dll.a 768KB
libavcodec.dll.a 751KB
libavdevice.dll.a 430KB
libavdevice.dll.a 420KB
libavutil.dll.a 338KB
libavutil.dll.a 329KB
libavformat.dll.a 138KB
libavformat.dll.a 134KB
libavfilter.dll.a 47KB
libavfilter.dll.a 46KB
libswscale.dll.a 22KB
libswscale.dll.a 22KB
libswresample.dll.a 15KB
libswresample.dll.a 15KB
libavresample.dll.a 14KB
libavresample.dll.a 14KB
libpostproc.dll.a 7KB
libpostproc.dll.a 7KB
mainwindow.cpp 14KB
moc_qctreewidget.cpp 12KB
moc_mainwindow.cpp 10KB
mydb.cpp 8KB
moc_document.cpp 8KB
qctreewidget.cpp 7KB
moc_renamedialog.cpp 5KB
messagebox.cpp 5KB
moc_createdevdialog.cpp 5KB
moc_mediadialog.cpp 4KB
moc_mydb.cpp 4KB
moc_messagebox.cpp 3KB
renamedialog.cpp 3KB
mediadialog.cpp 1KB
createdevdialog.cpp 1KB
document.cpp 691B
main.cpp 183B
dev.db 24KB
Makefile.Debug 334KB
avformat-58.def 4KB
swresample-3.def 497B
avcodec-59.dll 8.29MB
avformat-59.dll 5.47MB
avfilter-8.dll 2.64MB
Qt5Multimedia.dll 565KB
avutil-57.dll 481KB
libEasyAACEncoder.dll 474KB
swscale-6.dll 419KB
dsengine.dll 185KB
swresample-4.dll 105KB
qtmedia_audioengine.dll 47KB
qtaudio_windows.dll 47KB
wmfengine.dll 44KB
avdevice-59.dll 15KB
myEmap.exe 271KB
avcodec.h 213KB
avformat.h 118KB
avcodec.h 111KB
avformat.h 111KB
mfxstructures.h 66KB
mfxstructures.h 66KB
avfilter.h 43KB
avfilter.h 42KB
pixfmt.h 36KB
opt.h 36KB
opt.h 36KB
pixfmt.h 33KB
avio.h 32KB
frame.h 31KB
avio.h 31KB
channel_layout.h 31KB
frame.h 29KB
mfxplugin++.h 28KB
mfxplugin++.h 28KB
swresample.h 25KB
mem.h 24KB
hwcontext.h 24KB
packet.h 23KB
packet.h 23KB
hwcontext.h 23KB
mem.h 23KB
swresample.h 22KB
avresample.h 22KB
intreadwrite.h 19KB
intreadwrite.h 18KB
avdevice.h 18KB
avdevice.h 18KB
mfxfei.h 17KB
mfxfei.h 17KB
common.h 17KB
codec_id.h 17KB
codec_id.h 17KB
common.h 17KB
pixdesc.h 16KB
swscale.h 15KB
avstring.h 15KB
pixdesc.h 15KB
fifo.h 15KB
avstring.h 14KB
codec.h 13KB
codec.h 13KB
imgutils.h 13KB
共 469 条
- 1
- 2
- 3
- 4
- 5
资源评论
浅笑一斤
- 粉丝: 1w+
- 资源: 61
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功