在官网的Document的指导下,完成一个简单的文本操作。
具体要完成的功能
具备打开/保存/退出简单的功能
步骤1:在头文件中声明需要的控件 slots
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include<QtGui>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
~MainWindow();
private slots:
void exit();
void save();
void open();
private:
QTextEdit *textEdit;
QAction *openAction;
QAction *saveAction;
QAction *exitAction;
QMenu *menu;
};
#endif // MAINWINDOW_H
步骤2 对头文件中声明的控件,slots进行相应的操作
#include "mainwindow.h"
MainWindow::MainWindow()
{
textEdit = new QTextEdit;
setCentralWidget(textEdit);
openAction=new QAction(tr("&open"),this);
saveAction=new QAction(tr("&save"),this);
exitAction=new QAction(tr("&exit"),this);
connect(openAction,SIGNAL(triggered()),this,SLOT(open()));
connect(saveAction,SIGNAL(triggered()),this,SLOT(save()));
connect(exitAction,SIGNAL(triggered()),this,SLOT(exit()));
menu=menuBar()->addMenu(tr("&File"));
menu->addAction(openAction);
menu->addSeparator();
menu->addAction(saveAction);
menu->addSeparator();
menu->addAction(exitAction);
}
void MainWindow::open()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "",
tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));
if (fileName != "") {
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly)) {
QMessageBox::critical(this, tr("Error"),
tr("Could not open file"));
return;
}
QString contents = file.readAll().constData();
textEdit->setPlainText(contents);
file.close();
}
}
void MainWindow::save()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), "",
tr("Text Files (*.txt);;C++ Files (*.cpp *.h)"));
if (fileName != "") {
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly)) {
// error message
} else {
QTextStream stream(&file);
stream << textEdit->toPlainText();
stream.flush();
file.close();
}
}
}
void MainWindow::exit()
{
QMessageBox messageBox;
messageBox.setWindowTitle(tr("Notepad"));
messageBox.setText(tr("Do you really want to quit?"));
messageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
messageBox.setDefaultButton(QMessageBox::No);
if (messageBox.exec() == QMessageBox::Yes)
qApp->quit();
}
MainWindow::~MainWindow()
{
}