2
0
forked from Ivasoft/DSView

switch qt class to 6.0 version

This commit is contained in:
dreamsourcelabTAI
2021-11-19 14:24:26 +08:00
parent 6995e5d55e
commit c7a6ce2ef5
41 changed files with 385 additions and 240 deletions

View File

@@ -42,6 +42,7 @@
#include <QMessageBox>
#include <QScreen>
#include <QApplication>
#include <QDebug>
#include "dsvdef.h"
#include "config/appconfig.h"
@@ -53,6 +54,13 @@ namespace pv {
MainFrame::MainFrame()
{
_layout = NULL;
_bDraging = false;
_hit_border = None;
_freezing = false;
_titleBar = NULL;
_mainWindow = NULL;
setAttribute(Qt::WA_TranslucentBackground);
// Make this a borderless window which can't
// be resized or moved via the window system
@@ -61,23 +69,17 @@ MainFrame::MainFrame()
#else
setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
#endif
setMinimumHeight(minHeight);
setMinimumWidth(minWidth);
//resize(1024, 768);
// Set the window icon
QIcon icon;
icon.addFile(QString::fromUtf8(":/icons/logo.svg"),
QSize(), QIcon::Normal, QIcon::Off);
icon.addFile(QString::fromUtf8(":/icons/logo.svg"), QSize(), QIcon::Normal, QIcon::Off);
setWindowIcon(icon);
app::get_app_window_instance(this, true);
_bDraging = false;
_hit_border = None;
_freezing = false;
_minimized = false;
// Title
_titleBar = new toolbars::TitleBar(true, this);
@@ -87,7 +89,7 @@ MainFrame::MainFrame()
_titleBar->setTitle(_mainWindow->windowTitle());
QVBoxLayout *vbox = new QVBoxLayout();
vbox->setMargin(0);
vbox->setContentsMargins(0,0,0,0);
vbox->setSpacing(0);
vbox->addWidget(_titleBar);
vbox->addWidget(_mainWindow);
@@ -120,8 +122,8 @@ MainFrame::MainFrame()
_bottom_right->installEventFilter(this);
_layout = new QGridLayout(this);
_layout->setMargin(0);
_layout->setSpacing(0);
_layout->setContentsMargins(0,0,0,0);
_layout->addWidget(_top_left, 0, 0);
_layout->addWidget(_top, 0, 1);
_layout->addWidget(_top_right, 0, 2);
@@ -132,28 +134,17 @@ MainFrame::MainFrame()
_layout->addWidget(_bottom, 2, 1);
_layout->addWidget(_bottom_right, 2, 2);
connect(&_timer, SIGNAL(timeout()), this, SLOT(unfreezing()));
//readSettings();
connect(&_timer, SIGNAL(timeout()), this, SLOT(unfreezing()));
}
void MainFrame::changeEvent(QEvent* event)
{
QFrame::changeEvent(event);
QWindowStateChangeEvent* win_event = static_cast< QWindowStateChangeEvent* >(event);
if(win_event->type() == QEvent::WindowStateChange) {
if (win_event->oldState() & Qt::WindowMinimized) {
if (_minimized) {
readSettings();
_minimized = false;
}
}
}
}
void MainFrame::resizeEvent(QResizeEvent *event)
{
QFrame::resizeEvent(event);
if (_layout == NULL){
return;
}
if (isMaximized()) {
hide_border();
} else {
@@ -201,19 +192,18 @@ void MainFrame::show_border()
void MainFrame::showNormal()
{
show_border();
show_border();
QFrame::showNormal();
}
void MainFrame::showMaximized()
{
{
hide_border();
QFrame::showMaximized();
}
void MainFrame::showMinimized()
{
_minimized = true;
{
writeSettings();
QFrame::showMinimized();
}
@@ -285,57 +275,69 @@ bool MainFrame::eventFilter(QObject *object, QEvent *event)
newLeft = mouse_event->globalX();
if (newHeight > minimumHeight())
newTop = mouse_event->globalY();
setGeometry(newLeft, newTop,
newWidth, newHeight);
setGeometry(newLeft, newTop, newWidth, newHeight);
saveWindowRegion();
break;
case BottomLeft:
newWidth = std::max(_dragStartGeometry.right() - mouse_event->globalX(), minimumWidth());
newHeight = std::max(mouse_event->globalY() - _dragStartGeometry.top(), minimumHeight());
newLeft = geometry().left();
if (newWidth > minimumWidth())
newLeft = mouse_event->globalX();
setGeometry(newLeft, _dragStartGeometry.top(),
newWidth, newHeight);
setGeometry(newLeft, _dragStartGeometry.top(), newWidth, newHeight);
saveWindowRegion();
break;
case TopRight:
newWidth = std::max(mouse_event->globalX() - _dragStartGeometry.left(), minimumWidth());
newHeight = std::max(_dragStartGeometry.bottom() - mouse_event->globalY(), minimumHeight());
newTop = geometry().top();
if (newHeight > minimumHeight())
newTop = mouse_event->globalY();
setGeometry(_dragStartGeometry.left(), newTop,
newWidth, newHeight);
setGeometry(_dragStartGeometry.left(), newTop, newWidth, newHeight);
saveWindowRegion();
break;
case BottomRight:
newWidth = std::max(mouse_event->globalX() - _dragStartGeometry.left(), minimumWidth());
newHeight = std::max(mouse_event->globalY() - _dragStartGeometry.top(), minimumHeight());
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(),
newWidth, newHeight);
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(), newWidth, newHeight);
saveWindowRegion();
break;
case Left:
newWidth = _dragStartGeometry.right() - mouse_event->globalX();
if (newWidth > minimumWidth())
setGeometry(mouse_event->globalX(), _dragStartGeometry.top(),
newWidth, height());
if (newWidth > minimumWidth()){
setGeometry(mouse_event->globalX(), _dragStartGeometry.top(), newWidth, height());
saveWindowRegion();
}
break;
case Right:
newWidth = mouse_event->globalX() - _dragStartGeometry.left();
if (newWidth > minimumWidth())
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(),
newWidth, height());
if (newWidth > minimumWidth()){
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(), newWidth, height());
saveWindowRegion();
}
break;
case Top:
newHeight = _dragStartGeometry.bottom() - mouse_event->globalY();
if (newHeight > minimumHeight())
setGeometry(_dragStartGeometry.left(), mouse_event->globalY(),
width(), newHeight);
if (newHeight > minimumHeight()){
setGeometry(_dragStartGeometry.left(), mouse_event->globalY(),width(), newHeight);
saveWindowRegion();
}
break;
case Bottom:
newHeight = mouse_event->globalY() - _dragStartGeometry.top();
if (newHeight > minimumHeight())
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(),
width(), newHeight);
if (newHeight > minimumHeight()){
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(), width(), newHeight);
saveWindowRegion();
}
break;
default:
break;
}
@@ -366,39 +368,59 @@ bool MainFrame::eventFilter(QObject *object, QEvent *event)
return QFrame::eventFilter(object, event);
}
void MainFrame::saveWindowRegion()
{
AppConfig &app = AppConfig::Instance();
QRect rc = geometry();
app._frameOptions.left = rc.left();
app._frameOptions.top = rc.top();
app._frameOptions.right = rc.right();
app._frameOptions.bottom = rc.bottom();
}
void MainFrame::writeSettings()
{
AppConfig &app = AppConfig::Instance();
app._frameOptions.isMax = isMaximized();
app._frameOptions.geometry = saveGeometry();
app._frameOptions.isMax = isMaximized();
if (!isMaximized()){
saveWindowRegion();
}
app.SaveFrame();
}
void MainFrame::readSettings()
{
if (_layout == NULL)
return;
AppConfig &app = AppConfig::Instance();
if (app._frameOptions.language > 0){
_mainWindow->switchLanguage(app._frameOptions.language);
}
if (app._frameOptions.geometry.isEmpty()) {
if (app._frameOptions.right == 0) {
QScreen *screen=QGuiApplication::primaryScreen ();
const QRect availableGeometry = screen->availableGeometry();
resize(availableGeometry.width() / 2, availableGeometry.height() / 1.5);
const int origX = std::max(0, (availableGeometry.width() - width()) / 2);
const int origY = std::max(0, (availableGeometry.height() - height()) / 2);
move(origX, origY);
} else {
try
{
QByteArray ge = app._frameOptions.geometry;
restoreGeometry(ge);
}
catch(...)
{
MsgBox::Show(NULL, "restore frame status error!");
}
if (app._frameOptions.isMax){
showMaximized(); //show max by system api
}
else{
int left = app._frameOptions.left;
int top = app._frameOptions.top;
int right = app._frameOptions.right;
int bottom = app._frameOptions.bottom;
resize(right-left, bottom-top);
move(left, top);
}
}
// restore dockwidgets