mirror of
https://gitee.com/drabel/LibQQt.git
synced 2025-01-04 10:18:44 +08:00
171 lines
4.6 KiB
C++
171 lines
4.6 KiB
C++
#include "qqtwindow.h"
|
||
#include "ui_qqtwindow.h"
|
||
#include "qqtobjectfactory.h"
|
||
#include "qqt-qt.h"
|
||
#include "qqtcore.h"
|
||
#include "qqtgui.h"
|
||
#include "animationmanager.h"
|
||
|
||
#include <VLCQtCore/Common.h>
|
||
#include <VLCQtCore/Instance.h>
|
||
#include <VLCQtCore/Media.h>
|
||
#include <VLCQtCore/MediaPlayer.h>
|
||
#include <VLCQtWidgets/WidgetVideo.h>
|
||
|
||
#include "qqtwidgets.h"
|
||
#include "qqttreewidget.h"
|
||
#include "qqtsqltreemodel.h"
|
||
|
||
QQTWindow::QQTWindow(QWidget *parent) :
|
||
QStackedWidget(parent),
|
||
ui(new Ui::QQTWindow)
|
||
{
|
||
ui->setupUi(this);
|
||
|
||
QQTObjectFactory::registerObject(this);
|
||
|
||
#ifdef __EMBEDDED_LINUX__
|
||
/*
|
||
* 这里只要frameless足够
|
||
*/
|
||
setWindowFlags(Qt::FramelessWindowHint);
|
||
/*
|
||
* 控件背景透明,显示设置的图片背景或者下一级背景。
|
||
*/
|
||
setAttribute(Qt::WA_TranslucentBackground, true);
|
||
#endif
|
||
setFixedSize(1024, 600);
|
||
moveCenter(this);
|
||
setAcceptDrops(true);
|
||
|
||
ui->treeView->setModel(QQTTreeWidget::SQLTREE);
|
||
((QQTSqlTreeModel*)ui->treeView->model())
|
||
->setFilePath("LiveStream.db");
|
||
((QQTSqlTreeModel*)ui->treeView->model())
|
||
->query("");
|
||
for(int i = 1; i < 11; i++)
|
||
ui->treeView->setColumnHidden(i, true);
|
||
((QQTSqlTreeModel*)ui->treeView->model())
|
||
->setHeaderData(0, Qt::Horizontal, tr("pindao liebiao"));
|
||
connect(ui->treeView, SIGNAL(doubleClicked(const QModelIndex&)),
|
||
this, SLOT(doubleClicked(const QModelIndex&)));
|
||
|
||
#if 1
|
||
QPixmap pixmap("./skin/default/splash.png");
|
||
QSplashScreen splash(pixmap);
|
||
splash.showMessage(tr("Loading..."), Qt::AlignBottom);
|
||
splash.setFixedSize(600, 400);
|
||
splash.show();
|
||
QQTSleep(400);
|
||
splash.finish(this);
|
||
#elif 0
|
||
/**
|
||
* set movie in label0
|
||
* label0 will dispear in this function
|
||
*/
|
||
QMovie mov("./skin/default/splash.gif");
|
||
QLabel label;
|
||
label.setMovie(&mov);
|
||
label.setFixedSize(400, 300);
|
||
moveCenter(&label);
|
||
mov.start();
|
||
label.show();
|
||
QQTSleep(3000);
|
||
#endif
|
||
|
||
#if 1
|
||
//QCoreApplication::setAttribute(Qt::AA_X11InitThreads);
|
||
//VlcCommon::setPluginPath(QCoreApplication::applicationDirPath() + "/plugins");
|
||
_instance = new VlcInstance(VlcCommon::args(), this);
|
||
_player = new VlcMediaPlayer(_instance);
|
||
_player->setVideoWidget(ui->widget);
|
||
ui->widget->setMediaPlayer(_player);
|
||
ui->widget->setWindowFlags(ui->widget->windowFlags()|Qt::WindowTransparentForInput);
|
||
ui->horizontalSlider->setMediaPlayer(_player);
|
||
ui->horizontalSlider->setVolume(100);
|
||
_media = NULL;
|
||
|
||
//VlcMediaPlayer *_player2;
|
||
//_player2 = new VlcMediaPlayer(_instance);
|
||
//_player2->setVideoWidget(ui->widget_2);
|
||
//QString url2 = "rtmp://live.hkstv.hk.lxdns.com/live/hks";
|
||
//VlcMedia *_media2;
|
||
//_media2 = new VlcMedia(url2, _instance);
|
||
//ui->widget_2->setMediaPlayer(_player2);
|
||
//_player2->open(_media2);
|
||
|
||
#endif
|
||
|
||
/**
|
||
* decorate all windows
|
||
* nobody use animation to mainwindow
|
||
* so this animation use to child window
|
||
*/
|
||
AnimationManager::Instance(this);
|
||
}
|
||
|
||
QQTWindow::~QQTWindow()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
void QQTWindow::doubleClicked(const QModelIndex &index)
|
||
{
|
||
if(!index.parent().isValid())
|
||
return;
|
||
|
||
QString uri = index.model()->index(index.row(), 1, index.parent()).data().toString();
|
||
|
||
pline() << uri;
|
||
|
||
if(_player->hasVout())
|
||
_player->stop();
|
||
if(_media)
|
||
delete _media;
|
||
|
||
//QString url = "http://ivi.bupt.edu.cn/hls/cctv1.m3u8";
|
||
_media = new VlcMedia(uri, _instance);
|
||
_player->open(_media);
|
||
}
|
||
|
||
/**
|
||
* @brief QQTWindow::dragEnterEvent
|
||
* 当用户拖动文件到窗口部件上时候,就会触发dragEnterEvent事件
|
||
*/
|
||
void QQTWindow::dragEnterEvent(QDragEnterEvent *event)
|
||
{
|
||
//如果为文件,则支持拖放
|
||
if (event->mimeData()->hasFormat("text/uri-list"))
|
||
event->acceptProposedAction();
|
||
}
|
||
|
||
/**
|
||
* @brief QQTWindow::dropEvent
|
||
* 当用户放下这个文件后,就会触发dropEvent事件
|
||
*/
|
||
void QQTWindow::dropEvent(QDropEvent *event)
|
||
{
|
||
/**
|
||
* 注意:这里如果有多文件存在,意思是用户一下子拖动了多个文件,而不是拖动一个目录
|
||
* 如果想读取整个目录,自己编写函数实现读取整个目录文件名
|
||
*/
|
||
QList<QUrl> urls = event->mimeData()->urls();
|
||
if(urls.isEmpty())
|
||
return;
|
||
|
||
/**
|
||
* 往文本框中追加文件名
|
||
*/
|
||
foreach(QUrl url, urls) {
|
||
QString file_name = url.toLocalFile();
|
||
pline() << file_name;
|
||
if(_player->hasVout())
|
||
_player->stop();
|
||
if(_media)
|
||
delete _media;
|
||
_media = new VlcMedia(file_name, true, _instance);
|
||
_player->open(_media);
|
||
break;
|
||
}
|
||
}
|