文档章节

QT5:重写closeEvent.

SHIHUAMarryMe
 SHIHUAMarryMe
发布于 2016/04/02 16:57
字数 417
阅读 100
收藏 2

不废话了看代码吧:

 #include <QMainWindow>
#include <memory>
#include <QTextEdit>
#include <QCloseEvent>
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow()=default;
private:
    void open()noexcept;
    void save()noexcept;
    std::shared_ptr<QAction> openAction;
    std::shared_ptr<QAction> saveAction;
    std::shared_ptr<QMenu> openMenu;
    std::shared_ptr<QToolBar> theToolBar;
    std::shared_ptr<QDockWidget> dockWidget;
    std::shared_ptr<QTextEdit> textEdit;
protected:
    virtual void closeEvent(QCloseEvent* ev)override;
};
 #include "mainwindow.h"
#include <QMessageBox>
#include <QStatusBar>
#include <QMenuBar>
#include <QToolBar>
#include <QDockWidget>
#include <QDebug>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    this->setWindowTitle(tr("shihuawoaini [*]")); //注意这里的[*]这是个占位符(placeholder).
    this->setMinimumSize(500, 400);
    qDebug()<<iconSize();
    this->openAction = std::shared_ptr<QAction>(new QAction(tr("&open"), this));
    (this->openAction)->setShortcut(QKeySequence::Open); //设置快捷建.
    (this->openAction)->setStatusTip(tr("open..."));
    connect((this->openAction).get(), &QAction::triggered, this, &MainWindow::open);
    this->saveAction = std::shared_ptr<QAction>(new QAction(tr("&save"), this));
    saveAction->setShortcut(QKeySequence::Save); //设置快捷键.
    saveAction->setStatusTip(tr("save..."));
    connect(saveAction.get(), &QAction::triggered, this, &MainWindow::save);
    this->openMenu = std::shared_ptr<QMenu>(menuBar()->addMenu(tr("open")));
    (this->openMenu)->addAction(this->openAction.get());
    this->theToolBar = std::shared_ptr<QToolBar>(this->addToolBar(tr("File")));
    (this->theToolBar)->addAction(this->openAction.get());
    theToolBar->addAction(saveAction.get());
    this->dockWidget = std::shared_ptr<QDockWidget>(new QDockWidget(tr("DockWidget")));
    this->addDockWidget(Qt::LeftDockWidgetArea, (this->dockWidget).get());
    this->statusTip();
    this->statusBar();
    this->textEdit = std::shared_ptr<QTextEdit>(new QTextEdit(this));
    this->setCentralWidget(textEdit.get());
    connect(textEdit.get(), &QTextEdit::textChanged, [=](){ this->setWindowModified(true); }); //重点!!!!!!!!!!!!!!!!!!!!! 
}
void MainWindow::open()noexcept
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("open a file."), ".", tr("Text files(*.txt)"));
    if(!fileName.isEmpty()){
        QFile file(fileName);
        if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
            QMessageBox::warning(this, tr("Read File"), tr("Can not open file.\n%1").arg(fileName));
            return;
        }else{
            QTextStream readFile(&file);
            textEdit->setText(readFile.readAll());
            file.close();
        }
    }else{
        QMessageBox::warning(this, tr("Path"), tr("You do not select any file."));
    }
}
void MainWindow::save()noexcept
{
    QString fileName = QFileDialog::getSaveFileName(this, tr("save file"),".", tr("Text files(*.txt);;Images (*.png *.jpg)"));
    if(!fileName.isEmpty()){
        QFile file(fileName);
        if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
            QMessageBox::warning(this, tr("write file"), tr("open nothing"));
            return;
        }
        QTextStream writeFile(&file);
        writeFile<<(this->textEdit)->toPlainText();
        file.close();
    }else{
        QMessageBox::warning(this, tr("write fail"), tr("nothing for writing"));
    }
}
void MainWindow::closeEvent(QCloseEvent* ev) //重点!!!!!!!!!!!!!!!!! 
{
    if(this->isWindowModified()){
        bool boolean = QMessageBox::question(this, tr("Close Window"), tr("Do you want exit?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes;
        qDebug()<<boolean;
        if(boolean){
            ev->accept();
        }else{
            ev->ignore();
        }
    }else{
        ev->accept();
    }

© 著作权归作者所有

共有 人打赏支持
SHIHUAMarryMe
粉丝 13
博文 164
码字总数 138501
作品 0
武汉
程序员
私信 提问
PyQt如何重载窗体的关闭事件?

如何重写窗体的关闭事件? 当点击窗体关闭按钮时,我需要进一步处理,比如释放自定义线程。 def close 和 def closeEvent 都没起作用

shelwin
2014/08/05
497
0
跨平台SQLite管理工具 SQLiteStudio 3.0.1 发布

SQLiteStudio 之前的版本图形库用的是 Tcl/Tk, 3 系列则采用 Qt 进行重写。 SQLiteStudio 3.0.1 内置的 SQLite 引擎已经更新到最新的 3.8.7.4,这里是更详细的 ChangeLog。 如果你想像Acces...

eechen
2014/12/28
6.4K
18
QT5:事件接受与忽略.

让我们首先来看一个例子: //CustomButton.h include <QWidget> include <QPushButton> include <QDebug> class CustomButton : public QPushButton { Q_OBJECT public: CustomButton(QWidget......

SHIHUAMarryMe
2016/04/02
166
0
怎么实现url和form submit不触发onbeforeunload?

get测试 ----------------- 怎么实现点击 get测试 的时候 不弹出 “是否离开当前页面?”的提示?

小白小霸王
2012/07/27
2.3K
4
Qt编写自定义控件大全+designer源码

近期抽空将自定义控件的主界面全部重写了一遍,采用左侧树状节点导航,看起来更精美高大上一点,后期准备单独做个工具专用每个控件的属性设计,其实qt自带的designer就具备这些功能,于是从q...

飞扬青云
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何有效的背单词

转眼间到了大三快要结束了。英语四级考了三次了,每次都220多分。成绩很稳定,但离四级线还有200多分。学校规定如果过不了四级线,就拿不到学士学位证。没有学位证就找不到好工作,找不到好工...

我是菜鸟我骄傲
13分钟前
0
0
导出表格

https://blog.csdn.net/hhzzcc_/article/details/80419396

Js_Mei
36分钟前
0
0
Ubuntu中安装Elasticsearch

1.安装jre elasticsearch是使用java开发的搜索引擎,因此其运行依赖于java runtime environment,我们在这里不使用Oracel的官方jre,改为使用open-jre。 运行环境: ubuntu:18.04 jre:openj...

cloes
53分钟前
0
0
nginx rails 详细站点配置入门教程

Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,R...

xiangyunyan
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部