|
|
|
#include "mainwindow.h"
|
|
|
|
|
|
|
|
// #include <QWKWidgets/qwkwidgetsglobal.h>
|
|
|
|
// #include <QWKWidgets/widgetwindowagent.h>
|
|
|
|
|
|
|
|
#include <QList>
|
|
|
|
#include <QtGui/QPainter>
|
|
|
|
|
|
|
|
#include "ui_mainwindow.h"
|
|
|
|
// #include "widgetframe/windowbar.h"
|
|
|
|
// #include "widgetframe/windowbutton.h"
|
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
|
|
|
#include <QtGui/QActionGroup>
|
|
|
|
#else
|
|
|
|
#include <QtWidgets/QActionGroup>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
|
|
: QMainWindow(parent), ui(new Ui::MainWindow) {
|
|
|
|
ui->setupUi(this);
|
|
|
|
|
|
|
|
this->setWindowTitle("载荷视频播放软件");
|
|
|
|
/*
|
|
|
|
auto windowAgent = new QWK::WidgetWindowAgent(this);
|
|
|
|
windowAgent->setup(this);
|
|
|
|
auto windowBar = new QWK::WindowBar();
|
|
|
|
auto iconButton = new QWK::WindowButton();
|
|
|
|
iconButton->setObjectName(QStringLiteral("icon-button"));
|
|
|
|
iconButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
|
|
auto minButton = new QWK::WindowButton();
|
|
|
|
minButton->setObjectName(QStringLiteral("min-button"));
|
|
|
|
minButton->setProperty("system-button", true);
|
|
|
|
minButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
|
|
auto maxButton = new QWK::WindowButton();
|
|
|
|
maxButton->setCheckable(true);
|
|
|
|
maxButton->setObjectName(QStringLiteral("max-button"));
|
|
|
|
maxButton->setProperty("system-button", true);
|
|
|
|
maxButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
|
|
auto closeButton = new QWK::WindowButton();
|
|
|
|
closeButton->setObjectName(QStringLiteral("close-button"));
|
|
|
|
closeButton->setProperty("system-button", true);
|
|
|
|
closeButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
|
|
windowBar->setIconButton(iconButton);
|
|
|
|
windowBar->setMinButton(minButton);
|
|
|
|
windowBar->setMaxButton(maxButton);
|
|
|
|
windowBar->setCloseButton(closeButton);
|
|
|
|
windowAgent->setTitleBar(windowBar);
|
|
|
|
setMenuWidget(windowBar);
|
|
|
|
// windowAgent->setHitTestVisible(windowBar->menuBar(), true);
|
|
|
|
*/
|
|
|
|
// apply the qss
|
|
|
|
QFile qssfile(":/Qss/qss.qss");
|
|
|
|
if (qssfile.open(QFile::ReadOnly)) {
|
|
|
|
// file.open(QFile::ReadOnly);
|
|
|
|
QString style = QLatin1String(qssfile.readAll());
|
|
|
|
|
|
|
|
qApp->setStyleSheet(style);
|
|
|
|
// qDebug()<<style;
|
|
|
|
qssfile.close();
|
|
|
|
} else {
|
|
|
|
qDebug() << "Open file fail " << Qt::endl;
|
|
|
|
}
|
|
|
|
|
|
|
|
// QList<QString> list;
|
|
|
|
// list.append("rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid");
|
|
|
|
// list.append("rtsp://182.92.130.23/nmyj/video");
|
|
|
|
// list.append("rtmp://182.92.130.23/nmyj/video");
|
|
|
|
// list.append("rtmp://ns8.indexforce.com/home/mystream");
|
|
|
|
// // ui->videoWidget->udpPlay("172.10.1.199", 13001);
|
|
|
|
// ui->videoWidget->setVedioSaveFileDirPath("./video");
|
|
|
|
|
|
|
|
// ui->videoWidget->play(list.at(1));
|
|
|
|
// ui->videoWidget->pushStream("udp://172.10.1.199:8009");
|
|
|
|
|
|
|
|
QString urlFile = "networkSettingInfo.ini";
|
|
|
|
QFile file(urlFile);
|
|
|
|
if (!file.exists()) {
|
|
|
|
file.open(QIODevice::WriteOnly);
|
|
|
|
file.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
g_networkSettingInfo =
|
|
|
|
new QSettings("networkSettingInfo.ini", QSettings::IniFormat);
|
|
|
|
|
|
|
|
initSignalConnection();
|
|
|
|
initNotifyManager();
|
|
|
|
initNotifyMessageConnection();
|
|
|
|
initCommunitions();
|
|
|
|
}
|
|
|
|
|
|
|
|
MainWindow::~MainWindow() {
|
|
|
|
delete ui;
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainWindow::initSignalConnection() {
|
|
|
|
connect(ui->commandWidget, &CommandWidget::startConnectionSignal,
|
|
|
|
ui->videoWidget, &VideoWidget::udpPlay, Qt::UniqueConnection);
|
|
|
|
|
|
|
|
connect(ui->commandWidget, &CommandWidget::stopConnectionSignal,
|
|
|
|
ui->videoWidget, &VideoWidget::stopPlay, Qt::UniqueConnection);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainWindow::initNotifyMessageConnection() {
|
|
|
|
connect(ui->videoWidget, &VideoWidget::sendErrorMessageSignal, this,
|
|
|
|
&MainWindow::showMessageSlots);
|
|
|
|
connect(ui->commandWidget, &CommandWidget::sendErrorMessage, this,
|
|
|
|
&MainWindow::showMessageSlots);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::initNotifyManager() {
|
|
|
|
m_notifyManager = new NotifyManager(this, this);
|
|
|
|
m_notifyManager->setMaxCount(5);
|
|
|
|
m_notifyManager->setDisplayTime(2000);
|
|
|
|
m_notifyManager->setNotifyWndSize(400, 60);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainWindow::initCommunitions()
|
|
|
|
{
|
|
|
|
|
|
|
|
g_CommandudpSocket = new QUdpSocket(this);
|
|
|
|
// 将套接字绑定到指定端口
|
|
|
|
if (g_CommandudpSocket->bind(QHostAddress::Any, 1200)) {
|
|
|
|
qDebug() << "UDP 套接字已绑定到端口 1200";
|
|
|
|
} else {
|
|
|
|
qDebug() << "绑定 UDP 套接字失败";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::showMessageSlots(QString message, int type) {
|
|
|
|
if (m_notifyManager) {
|
|
|
|
m_notifyManager->notify(message, "", type, 3000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
void MainWindow::installWindowAgent() {
|
|
|
|
// 1. Setup window agent
|
|
|
|
windowAgent = new QWK::WidgetWindowAgent(this);
|
|
|
|
windowAgent->setup(this);
|
|
|
|
|
|
|
|
// 2. Construct your title bar
|
|
|
|
auto menuBar = [this]() {
|
|
|
|
auto menuBar = new QMenuBar(this);
|
|
|
|
|
|
|
|
// Virtual menu
|
|
|
|
auto file = new QMenu(tr("File(&F)"), menuBar);
|
|
|
|
file->addAction(new QAction(tr("New(&N)"), menuBar));
|
|
|
|
file->addAction(new QAction(tr("Open(&O)"), menuBar));
|
|
|
|
file->addSeparator();
|
|
|
|
|
|
|
|
auto edit = new QMenu(tr("Edit(&E)"), menuBar);
|
|
|
|
edit->addAction(new QAction(tr("Undo(&U)"), menuBar));
|
|
|
|
edit->addAction(new QAction(tr("Redo(&R)"), menuBar));
|
|
|
|
|
|
|
|
// Theme action
|
|
|
|
auto darkAction = new QAction(tr("Enable dark theme"), menuBar);
|
|
|
|
darkAction->setCheckable(true);
|
|
|
|
// connect(darkAction, &QAction::triggered, this, [this](bool checked) {
|
|
|
|
// loadStyleSheet(checked ? Dark : Light); //
|
|
|
|
// });
|
|
|
|
// connect(this, &MainWindow::themeChanged, darkAction,
|
|
|
|
// [this, darkAction]() {
|
|
|
|
// darkAction->setChecked(currentTheme == Dark); //
|
|
|
|
// });
|
|
|
|
|
|
|
|
auto noneAction = new QAction(tr("None"), menuBar);
|
|
|
|
noneAction->setData(QStringLiteral("none"));
|
|
|
|
noneAction->setCheckable(true);
|
|
|
|
noneAction->setChecked(true);
|
|
|
|
|
|
|
|
auto dwmBlurAction = new QAction(tr("Enable DWM blur"), menuBar);
|
|
|
|
dwmBlurAction->setData(QStringLiteral("dwm-blur"));
|
|
|
|
dwmBlurAction->setCheckable(true);
|
|
|
|
|
|
|
|
auto acrylicAction =
|
|
|
|
new QAction(tr("Enable acrylic material"), menuBar);
|
|
|
|
acrylicAction->setData(QStringLiteral("acrylic-material"));
|
|
|
|
acrylicAction->setCheckable(true);
|
|
|
|
|
|
|
|
auto micaAction = new QAction(tr("Enable mica"), menuBar);
|
|
|
|
micaAction->setData(QStringLiteral("mica"));
|
|
|
|
micaAction->setCheckable(true);
|
|
|
|
|
|
|
|
auto micaAltAction = new QAction(tr("Enable mica alt"), menuBar);
|
|
|
|
micaAltAction->setData(QStringLiteral("mica-alt"));
|
|
|
|
micaAltAction->setCheckable(true);
|
|
|
|
|
|
|
|
auto winStyleGroup = new QActionGroup(menuBar);
|
|
|
|
winStyleGroup->addAction(noneAction);
|
|
|
|
winStyleGroup->addAction(dwmBlurAction);
|
|
|
|
winStyleGroup->addAction(acrylicAction);
|
|
|
|
winStyleGroup->addAction(micaAction);
|
|
|
|
winStyleGroup->addAction(micaAltAction);
|
|
|
|
// connect(winStyleGroup, &QActionGroup::triggered, this,
|
|
|
|
// [this, winStyleGroup](QAction *action) {
|
|
|
|
// // Unset all custom style attributes first, otherwise the
|
|
|
|
// // style will not display correctly
|
|
|
|
// for (const QAction *_act : winStyleGroup->actions()) {
|
|
|
|
// const QString data = _act->data().toString();
|
|
|
|
// if (data.isEmpty() || data == QStringLiteral("none"))
|
|
|
|
// {
|
|
|
|
// continue;
|
|
|
|
// }
|
|
|
|
// windowAgent->setWindowAttribute(data, false);
|
|
|
|
// }
|
|
|
|
// const QString data = action->data().toString();
|
|
|
|
// if (data == QStringLiteral("none")) {
|
|
|
|
// setProperty("custom-style", false);
|
|
|
|
// } else if (!data.isEmpty()) {
|
|
|
|
// windowAgent->setWindowAttribute(data, true);
|
|
|
|
// setProperty("custom-style", true);
|
|
|
|
// }
|
|
|
|
// style()->polish(this);
|
|
|
|
// });
|
|
|
|
|
|
|
|
// Real menu
|
|
|
|
auto settings = new QMenu(tr("Settings(&S)"), menuBar);
|
|
|
|
settings->addAction(darkAction);
|
|
|
|
|
|
|
|
settings->addSeparator();
|
|
|
|
settings->addAction(noneAction);
|
|
|
|
settings->addAction(dwmBlurAction);
|
|
|
|
settings->addAction(acrylicAction);
|
|
|
|
settings->addAction(micaAction);
|
|
|
|
settings->addAction(micaAltAction);
|
|
|
|
|
|
|
|
menuBar->addMenu(file);
|
|
|
|
menuBar->addMenu(edit);
|
|
|
|
menuBar->addMenu(settings);
|
|
|
|
return menuBar;
|
|
|
|
}();
|
|
|
|
menuBar->setObjectName(QStringLiteral("win-menu-bar"));
|
|
|
|
|
|
|
|
auto titleLabel = new QLabel();
|
|
|
|
titleLabel->setAlignment(Qt::AlignCenter);
|
|
|
|
titleLabel->setObjectName(QStringLiteral("win-title-label"));
|
|
|
|
|
|
|
|
#ifndef Q_OS_MAC
|
|
|
|
auto iconButton = new QWK::WindowButton();
|
|
|
|
iconButton->setObjectName(QStringLiteral("icon-button"));
|
|
|
|
iconButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
|
|
auto pinButton = new QWK::WindowButton();
|
|
|
|
pinButton->setCheckable(true);
|
|
|
|
pinButton->setObjectName(QStringLiteral("pin-button"));
|
|
|
|
pinButton->setProperty("system-button", true);
|
|
|
|
pinButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
|
|
auto minButton = new QWK::WindowButton();
|
|
|
|
minButton->setObjectName(QStringLiteral("min-button"));
|
|
|
|
minButton->setProperty("system-button", true);
|
|
|
|
minButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
|
|
auto maxButton = new QWK::WindowButton();
|
|
|
|
maxButton->setCheckable(true);
|
|
|
|
maxButton->setObjectName(QStringLiteral("max-button"));
|
|
|
|
maxButton->setProperty("system-button", true);
|
|
|
|
maxButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
|
|
auto closeButton = new QWK::WindowButton();
|
|
|
|
closeButton->setObjectName(QStringLiteral("close-button"));
|
|
|
|
closeButton->setProperty("system-button", true);
|
|
|
|
closeButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
auto windowBar = new QWK::WindowBar();
|
|
|
|
#ifndef Q_OS_MAC
|
|
|
|
windowBar->setIconButton(iconButton);
|
|
|
|
windowBar->setPinButton(pinButton);
|
|
|
|
windowBar->setMinButton(minButton);
|
|
|
|
windowBar->setMaxButton(maxButton);
|
|
|
|
windowBar->setCloseButton(closeButton);
|
|
|
|
#endif
|
|
|
|
windowBar->setMenuBar(menuBar);
|
|
|
|
windowBar->setTitleLabel(titleLabel);
|
|
|
|
windowBar->setHostWidget(this);
|
|
|
|
|
|
|
|
windowAgent->setTitleBar(windowBar);
|
|
|
|
#ifndef Q_OS_MAC
|
|
|
|
windowAgent->setHitTestVisible(pinButton, true);
|
|
|
|
windowAgent->setSystemButton(QWK::WindowAgentBase::WindowIcon, iconButton);
|
|
|
|
windowAgent->setSystemButton(QWK::WindowAgentBase::Minimize, minButton);
|
|
|
|
windowAgent->setSystemButton(QWK::WindowAgentBase::Maximize, maxButton);
|
|
|
|
windowAgent->setSystemButton(QWK::WindowAgentBase::Close, closeButton);
|
|
|
|
#endif
|
|
|
|
windowAgent->setHitTestVisible(menuBar, true);
|
|
|
|
|
|
|
|
#ifdef Q_OS_MAC
|
|
|
|
windowAgent->setSystemButtonAreaCallback([](const QSize &size) {
|
|
|
|
static constexpr const int width = 75;
|
|
|
|
return QRect(QPoint(size.width() - width, 0),
|
|
|
|
QSize(width, size.height())); //
|
|
|
|
});
|
|
|
|
#endif
|
|
|
|
|
|
|
|
setMenuWidget(windowBar);
|
|
|
|
|
|
|
|
#ifndef Q_OS_MAC
|
|
|
|
connect(windowBar, &QWK::WindowBar::pinRequested, this,
|
|
|
|
[this, pinButton](bool pin) {
|
|
|
|
if (isHidden() || isMinimized() || isMaximized() ||
|
|
|
|
isFullScreen()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
setWindowFlag(Qt::WindowStaysOnTopHint, pin);
|
|
|
|
show();
|
|
|
|
pinButton->setChecked(pin);
|
|
|
|
});
|
|
|
|
connect(windowBar, &QWK::WindowBar::minimizeRequested, this,
|
|
|
|
&QWidget::showMinimized);
|
|
|
|
connect(windowBar, &QWK::WindowBar::maximizeRequested, this,
|
|
|
|
[this, maxButton](bool max) {
|
|
|
|
if (max) {
|
|
|
|
showMaximized();
|
|
|
|
} else {
|
|
|
|
showNormal();
|
|
|
|
}
|
|
|
|
|
|
|
|
// It's a Qt issue that if a QAbstractButton::clicked triggers a
|
|
|
|
// window's maximization, the button remains to be hovered until
|
|
|
|
// the mouse move. As a result, we need to manually send leave
|
|
|
|
// events to the button.
|
|
|
|
// emulateLeaveEvent(maxButton);
|
|
|
|
});
|
|
|
|
connect(windowBar, &QWK::WindowBar::closeRequested, this, &QWidget::close);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
*/
|