不需要窗口右上角图标(最大化、最小化、关闭按钮 )可以用 setWindowFlags( Qt::CustomizeWindowHint);
如果设置无边框的话Qt::FramelessWindowHint
1.在窗口重写closeEvent事件就能获取响应信息,
void Dlg_Main::closeEvent(QCloseEvent *event)
{
Dlg_MessageBox box;
box.SetInfoText(GBUTF8("\n 是否确定退出当前应用程序? \n"));
int nRet = box.exec();
if (nRet == 0)
{
event->ignore();
return;
}
event->accept();
QDialog::closeEvent(event);
}
2. 用Dialog实现MessageBox
//Dlg_MessageBox.h
#pragma once
#include <QWidget>
#include "ui_Dlg_MessageBox.h"
#include <QDialog>
class Dlg_MessageBox : public QDialog
{
Q_OBJECT
public:
Dlg_MessageBox(QWidget *parent = Q_NULLPTR);
~Dlg_MessageBox();
void SetTitleInfo(QString sTitle);
void SetInfoText(QString sInfo);
void SetBtnNoVisible(bool is);
public slots:
void Slot_BtnYesClicked();
void Slot_BtnNoClicked();
private:
Ui::Dlg_MessageBox ui;
};
//--------------Dlg_MessageBox.cpp-------------------
#include "Dlg_MessageBox.h"
Dlg_MessageBox::Dlg_MessageBox(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
setWindowFlags( Qt::CustomizeWindowHint);
//setWindowFlags(windowFlags()& ~Qt::WindowMaximizeButtonHint& ~Qt::WindowMinimizeButtonHint);
setFixedSize(382, 256);
setWindowTitle("");
connect(ui.btn_yes, SIGNAL(clicked()), this, SLOT(Slot_BtnYesClicked()));
connect(ui.btn_no, SIGNAL(clicked()), this, SLOT(Slot_BtnNoClicked()));
}
Dlg_MessageBox::~Dlg_MessageBox()
{
}
void Dlg_MessageBox::SetBtnNoVisible(bool is)
{
ui.btn_no->setVisible(is);
}
void Dlg_MessageBox::Slot_BtnNoClicked()
{
this->done(0);
}
void Dlg_MessageBox::Slot_BtnYesClicked()
{
this->done(1);
}
void Dlg_MessageBox::SetTitleInfo(QString sTitle)
{
ui.lab_title->setText(sTitle);
}
void Dlg_MessageBox::SetInfoText(QString sInfo)
{
ui.lab_info->setText(sInfo);
}
//ui 界面