You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
VideoClient98/src/mainwindow.cpp

337 lines
12 KiB
C++

#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
}
*/