1、QAction 的信号
- QAction 被点击之后会产生一个 triggered 信号
— 通过信号与槽的机制能够捕捉对 QAction 对象的操作
— 项目中可以将多个信号映射到同一个槽函数
connect(action, SIGNAL(triggered()), this, SLOT(slot_function()));
程序:
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <QPlainTextEdit>
#include <QLabel>
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QPlainTextEdit plainEdit;
QLabel statusLbl;
QString m_filePath;
MainWindow();
MainWindow(const MainWindow& obj);
bool construct();
bool initMenuBar();
bool initToolBar();
bool initStatusBar();
bool initMainEditor();
bool initFileMenu(QMenuBar* mb);
bool initEditMenu(QMenuBar* mb);
bool initFormatMenu(QMenuBar* mb);
bool initViewMenu(QMenuBar* mb);
bool initHelpMenu(QMenuBar* mb);
bool initFileToolItem(QToolBar* tb);
bool initEditToolItem(QToolBar* tb);
bool initFormatToolItem(QToolBar* tb);
bool initViewToolItem(QToolBar* tb);
bool makeAction(QAction*& action, QWidget* parent, QString text, int key);
bool makeAction(QAction*& action, QWidget* parent, QString text, QString path);
QString showFileDialog(QFileDialog::AcceptMode mode, QString title);
void showErrorMessage(QString message);
private slots:
void onFileOpen();
void onFileSave();
void onFileSaveAs();
public:
static MainWindow* NewInstance();
~MainWindow();
};
#endif // MAINWINDOW_H
MainWindowUI.cpp
#include "MainWindow.h"
#include <QMenuBar>
#include <QStatusBar>
#include <QMenu>
#include <QToolBar>
#include <QAction>
#include <QLabel>
MainWindow::MainWindow(): QMainWindow()
{
m_filePath = "";
resize(1000, 800);
setWindowTitle("NotePad");
}
bool MainWindow::construct()
{
bool ret = true;
ret = ret && initMenuBar();
ret = ret && initToolBar();
ret = ret && initStatusBar();
ret = ret && initMainEditor();
return ret;
}
MainWindow* MainWindow::NewInstance()
{
MainWindow* ret = new MainWindow();
if(!(ret && ret->construct()))
{
delete ret;
ret = nullptr;
}
return ret;
}
bool MainWindow::initMenuBar()
{
bool ret = true;
QMenuBar* mb = menuBar();
ret = ret && initFileMenu(mb);
ret = ret && initEditMenu(mb);
ret = ret && initFormatMenu(mb);
ret = ret && initViewMenu(mb);
ret = ret && initHelpMenu(mb);
return ret;
}
bool MainWindow::initToolBar()
{
bool ret = true;
QToolBar* tb = addToolBar("ToolBar");
tb->setFloatable(false);
tb->setMovable(false);
tb->setIconSize(QSize(16, 16));
ret = ret && initFileToolItem(tb);
tb->addSeparator();
ret = ret && initEditToolItem(tb);
tb->addSeparator();
ret = ret && initFormatToolItem(tb);
tb->addSeparator();
ret = ret && initViewToolItem(tb);
return ret;
}
bool MainWindow::initStatusBar()
{
bool ret = true;
QStatusBar* sb = statusBar();
QLabel* label = new QLabel("D.T.Software");
if(label != nullptr)
{
statusLbl.setMinimumWidth(200);
statusLbl.setAlignment(Qt::AlignCenter);
statusLbl.setText("Ln: 1 Col: 1");
label->setMinimumWidth(200);
label->setAlignment(Qt::AlignCenter);
sb->addPermanentWidget(new QLabel());
sb->addPermanentWidget(&statusLbl);
sb->addPermanentWidget(label);
}
else
{
ret = false;
}
return ret;
}
bool MainWi