QString str;
str = "%1 %2";
str.arg("%1f", "Hello");
// returns "%1f Hello"
解释下tr(%1).arg(parameter)的含义。
这里学习QTextEdit 与QFileDialog 与QTextStream的相关问题。
代码如下:
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtWidgets/QMainWindow>
#include "ui_mainwindow.h"
#include <QIcon>
#include <QAction>
#include <QMenuBar>
#include<QToolBar>
#include <QStatusBar>
#include <QMessageBox>
#include <QTextEdit>
#include <QFileDialog>
#include <QTextStream>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindowClass ui;
void openFile();
void saveFile();
QAction *openAction;
QAction *saveAction;
QTextEdit *textEdit;
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
setWindowTitle(tr("Main Window"));
openAction = new QAction(QIcon(""),tr("&Open"),this);
openAction->setShortcuts(QKeySequence::Open);
openAction->setStatusTip("Open an existing file");
saveAction = new QAction(QIcon(""),tr("&Save"),this);
saveAction->setShortcuts(QKeySequence::Save);
saveAction->setStatusTip("Save a new file");
connect(openAction,&QAction::triggered,this,&MainWindow::openFile);
connect(saveAction,&QAction::triggered,this,&MainWindow::saveFile);
QMenu *file = menuBar()->addMenu(tr("&File"));
file->addAction(openAction);
file->addAction(saveAction);
QToolBar *toolBar = addToolBar(tr("&File"));
toolBar->addAction(openAction);
toolBar->addAction(saveAction);
QStatusBar *statuBar = statusBar();
statuBar->addAction(openAction);
statuBar->addAction(saveAction);
textEdit = new QTextEdit(this);
setCentralWidget(textEdit);
}
MainWindow::~MainWindow()
{
}
void MainWindow::openFile()
{
QString path = QFileDialog::getOpenFileName(this,tr("Open File"),".",tr("Text Files(*.txt)"));
if (!path.isEmpty())
{
QFile file(path);
if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
{
QMessageBox :: warning(this,tr("Read File"),tr("Cannot open file:\n%1").arg(path));
return;
}
QTextStream in(&file);
textEdit->setText(in.readAll());
file.close();
}
else
{
QMessageBox::warning(this,tr("Path"),tr("You did not select any file."));
}
}
void MainWindow::saveFile()
{
QString path = QFileDialog::getSaveFileName(this,tr("Save File"),".",tr("Text Files(*.txt)"));
if(!path.isEmpty())
{
QFile file(path);
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
{
QMessageBox::warning(this,tr("Write File"),tr("Cannot open file:\n%1").arg(path));
return;
}
QTextStream out(&file);
out<<textEdit->toPlainText();
file.close();
}
else
{
QMessageBox::warning(this,tr("Path"),tr("You did not select any file."));
}
}
当textEdit内容改变时,在退出时弹出提示。
//mainwindow.h
protected:
void closeEvent(QCloseEvent *event);
//mainwindow.cpp
textEdit = new QTextEdit(this);
setCentralWidget(textEdit);
connect(textEdit, &QTextEdit::textChanged, [=](){this->setWindowModified(true);});
void MainWindow::closeEvent(QCloseEvent *event)
{
if (isWindowModified())
{
bool exit = QMessageBox::question(this,tr("Quit"),tr("Are you sure to quit this application?"),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::No) == QMessageBox::Yes;
if(exit)
{
event->accept();
}
else
{
event->ignore();
}
}
else
{
event->accept();
}
}