87 lines
3.3 KiB
C++

#include "messagebox.h"
#include <QGridLayout>
#include <DLabel>
#include <DPushButton>
#include <DTitlebar>
#include <QScreen>
MessageBox::MessageBox(DWidget *parent){
this->parent = parent;
}
void MessageBox::ShowMessageBox(QString iconPath, QString title, QString text){
DMainWindow *messageBox = new DMainWindow();
DWidget *widget = new DWidget();
QGridLayout *layout = new QGridLayout();
DPushButton *ok = new DPushButton("确定");
QObject::connect(ok, &DPushButton::clicked, messageBox, [messageBox](){
messageBox->close();
});
DTitlebar *bar = messageBox->titlebar();
bar->setTitle(title);
bar->setIcon(QIcon(":/Icon/deepin-wine-runner.svg"));
bar->setMenuVisible(false);
bar->setBackgroundTransparent(true);
layout->addWidget(new DLabel("<img src='" + iconPath + "'>"));
layout->addWidget(new DLabel(text), 0, 1);
layout->addWidget(ok, 1, 0, 1, 2);
widget->setLayout(layout);
messageBox->setEnableBlurWindow(false);
messageBox->setEnableSystemResize(false);
messageBox->setWindowFlags(messageBox->windowFlags() &~ Qt::WindowMaximizeButtonHint &~ Qt::Dialog &~ Qt::WindowMinimizeButtonHint);
messageBox->setCentralWidget(widget);
messageBox->setWindowTitle(title);
// 设置窗口顶置
messageBox->setWindowFlag(Qt::WindowStaysOnTopHint);
messageBox->show();
messageBox->resize(messageBox->frameSize().width(), messageBox->frameSize().height());
//// 根据窗口信息获取中点
if(this->parent == NULL){
/// 如果没有传入窗口
// 获取主屏幕信息
int screenWidth = QGuiApplication::primaryScreen()->geometry().width();
int screenHeight = QGuiApplication::primaryScreen()->geometry().height();
// 获取对话框信息
int messageBoxWidth = messageBox->frameSize().width();
int messageBoxHeight = messageBox->frameSize().height();
// 计算坐标
int x = (screenWidth / 2) - (messageBoxWidth / 2);
int y = (screenHeight / 2) - (messageBoxHeight / 2);
messageBox->move(x, y);
qDebug() << screenWidth;
qDebug() << screenHeight;
qDebug() << messageBoxWidth;
qDebug() << messageBoxHeight;
qDebug() << x << y;
return;
}
// 获取窗口信息
int parentWindowX = this->parent->frameGeometry().x();
int parentWindowY = this->parent->frameGeometry().y();
int parentWindowWidth = this->parent->frameGeometry().width();
int parentWindowHeight = this->parent->frameGeometry().height();
int messageBoxWidth = messageBox->frameSize().width();
int messageBoxHeight = messageBox->frameSize().height();
// 计算坐标
int x = parentWindowX + ((parentWindowWidth / 2) - (messageBoxWidth / 2));
int y = parentWindowY + ((parentWindowHeight / 2) - (messageBoxHeight / 2));
messageBox->move(x, y);
qDebug() << parentWindowX;
qDebug() << parentWindowY;
qDebug() << parentWindowWidth;
qDebug() << parentWindowHeight;
qDebug() << messageBoxWidth;
qDebug() << messageBoxHeight;
qDebug() << x << y;
}
void MessageBox::information(QString title, QString text){
ShowMessageBox(":/Icon/MessageBox/dialog-information.svg", title, text);
}
void MessageBox::critical(QString title, QString text){
ShowMessageBox(":/Icon/MessageBox/dialog-error.svg", title, text);
}