完成窗口在x11下缩放和移动时子窗口的位置同步问题

This commit is contained in:
duanshengchao 2024-11-20 17:29:29 +08:00
parent 2c4a54738b
commit 62f8b197f1
6 changed files with 56 additions and 13 deletions

View File

@ -46,6 +46,7 @@ public:
protected:
bool eventFilter(QObject*, QEvent*) override;
void resizeEvent(QResizeEvent*) override;
void dragEnterEvent(QDragEnterEvent* event) override;
//void dragMoveEvent(QDragMoveEvent* event) override;
void dragLeaveEvent(QDragLeaveEvent* event) override;

View File

@ -30,6 +30,9 @@ public:
void creatSecondaryWindowAndAddDashboard(QPoint, Dashboard*);
void removeSecondartWindow(QString&);
protected:
virtual void resizeEvent(QResizeEvent*) override;
private:
Ui::dvieMainWindow* ui;
TransparentMask* m_pTransparentMask;

View File

@ -33,6 +33,7 @@ public:
protected:
virtual void closeEvent(QCloseEvent*) override;
virtual void resizeEvent(QResizeEvent*) override;
private:
Ui::dvieSecondaryWindow* ui;

View File

@ -81,6 +81,28 @@ bool DashboardFrame::eventFilter(QObject* obj, QEvent* event)
return QObject::eventFilter(obj, event);
}
void DashboardFrame::resizeEvent(QResizeEvent* event)
{
if(m_pTransparentMask && m_pTransparentMask->isVisible())
m_pTransparentMask->setGeometry(0, 0, this->width(), this->height());
if(m_pMessageDialog && m_pMessageDialog->isVisible())
{
int nX = (ui->navigationPanel->width() - m_pMessageDialog->width()) * 0.5;
int nY = ui->navigationPanel->y() + ui->navigationPanel->height() * 0.5;
m_pMessageDialog->move(nX, nY);
}
if(m_pDashboardNamingDialog && m_pDashboardNamingDialog->isVisible())
{
int nX = (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5;
int nY = ui->navigationPanel->y() + ui->navigationPanel->height() * 0.5;
m_pDashboardNamingDialog->move(nX, nY);
}
QWidget::resizeEvent(event);
}
void DashboardFrame::dragEnterEvent(QDragEnterEvent* event)
{
const QMimeData* mimeData = event->mimeData();
@ -172,7 +194,7 @@ void DashboardFrame::hideTransparentMask()
dvieWindow->hideTransparentMask();
}
if(m_pTransparentMask != nullptr && m_pTransparentMask->isVisible())
if(m_pTransparentMask && m_pTransparentMask->isVisible())
m_pTransparentMask->hide();
}
@ -188,7 +210,7 @@ void DashboardFrame::showMessageDialog(MessageDialogType type,const QString& str
m_pMessageDialog->setMessage(type, strTitle, strContent);
int nX = (ui->navigationPanel->width() - m_pMessageDialog->width()) * 0.5;
int nY = ui->navigationPanel->y() + ui->navigationPanel->height() * 0.5;
m_pMessageDialog->setGeometry(nX, nY, m_pMessageDialog->width(), m_pMessageDialog->height());
m_pMessageDialog->move(nX, nY);
m_pMessageDialog->raise();
if(type == type_question)
m_pMessageDialog->exec();
@ -416,7 +438,7 @@ void DashboardFrame::onBtnClicked_addDashboard()
showTransparentMask();
int nX = (ui->navigationPanel->width() - m_pDashboardNamingDialog->width()) * 0.5;
int nY = ui->navigationPanel->y() + ui->navigationPanel->height() * 0.5;
m_pDashboardNamingDialog->setGeometry(nX, nY, m_pDashboardNamingDialog->width(), m_pDashboardNamingDialog->height());
m_pDashboardNamingDialog->move(nX, nY);
m_pDashboardNamingDialog->showUsedForCreat();
m_pDashboardNamingDialog->raise();
}

View File

@ -24,6 +24,14 @@ DvieMainWindow::~DvieMainWindow()
delete ui;
}
void DvieMainWindow::resizeEvent(QResizeEvent* event)
{
if(m_pTransparentMask && m_pTransparentMask->isVisible())
m_pTransparentMask->setGeometry(ui->topWidget->geometry());
QMainWindow::resizeEvent(event);
}
void DvieMainWindow::showTransparentMask()
{
if(m_pTransparentMask == nullptr)
@ -34,7 +42,7 @@ void DvieMainWindow::showTransparentMask()
}
void DvieMainWindow::hideTransparentMask()
{
if(m_pTransparentMask != nullptr && m_pTransparentMask->isVisible())
if(m_pTransparentMask && m_pTransparentMask->isVisible())
m_pTransparentMask->hide();
}

View File

@ -28,6 +28,22 @@ DvieSecondaryWindow::~DvieSecondaryWindow()
delete ui;
}
void DvieSecondaryWindow::closeEvent(QCloseEvent* e)
{
if(m_pMainWindow)
m_pMainWindow->removeSecondartWindow(m_strName);
else
QMainWindow::closeEvent(e);
}
void DvieSecondaryWindow::resizeEvent(QResizeEvent* event)
{
if(m_pTransparentMask && m_pTransparentMask->isVisible())
m_pTransparentMask->setGeometry(ui->topWidget->geometry());
QMainWindow::resizeEvent(event);
}
void DvieSecondaryWindow::showTransparentMask()
{
if(m_pTransparentMask == nullptr)
@ -38,18 +54,10 @@ void DvieSecondaryWindow::showTransparentMask()
}
void DvieSecondaryWindow::hideTransparentMask()
{
if(m_pTransparentMask != nullptr && m_pTransparentMask->isVisible())
if(m_pTransparentMask && m_pTransparentMask->isVisible())
m_pTransparentMask->hide();
}
void DvieSecondaryWindow::closeEvent(QCloseEvent* e)
{
if(m_pMainWindow)
m_pMainWindow->removeSecondartWindow(m_strName);
else
QMainWindow::closeEvent(e);
}
QString DvieSecondaryWindow::name()
{
return m_strName;