1、主窗口中的工具栏
工具栏的概念和意义
— 应用程序中 集成各种功能 实现快捷使用的一个区域
— 工具栏并不是应用程序中必须存在的组件
— 工具栏中的元素可以是各种窗口组件
— 工具栏中的元素通常以图标按钮的方式存在
在 Qt 中提供与工具栏相关的类组件
在 Qt 主窗口中创建工具栏
QToolBar 的关键成员函数
— void setFloatable(bool floatable)
设置当前工具栏能不能悬浮,参数一般设置成 false
— void setMovable(bool movable)
设置当前工具栏能不能移动,参数一般设置成 false
— void setIconSize(const QSize& iconSize)
设置工具栏的每一个图标大小
QToolBar 中可以加入任意的QWidget 组件
工具栏初体验:
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "MainWindow.h"
#include "QToolBar"
#include
#include
#include
#include MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{QToolBar* tb = addToolBar("ToolBar");QAction* action = new QAction("", nullptr);action->setToolTip("Open");action->setIcon(QIcon(":/Res/open.png"));QPushButton* btn = new QPushButton("btn");QLabel* label = new QLabel("label");QLineEdit* edit = new QLineEdit("xiebs");tb->setFloatable(false);tb->setMovable(false);tb->addAction(action);tb->addWidget(btn);tb->addWidget(label);tb->addWidget(edit);
}MainWindow::~MainWindow()
{
}
main.cpp
#include "MainWindow.h"#include int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
工具栏实例:
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include
#include
#include
#include
#include class MainWindow : public QMainWindow
{Q_OBJECT
private:MainWindow();MainWindow(const MainWindow&);MainWindow& operator= (const MainWindow&);bool construct();bool initMenuBar();bool initToolBar();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, QString text, int key);bool makeAction(QAction*& action, QString tip, QString icon);
public:static MainWindow* NewInstance();~MainWindow();
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "MainWindow.h"
#include MainWindow::MainWindow()
{resize(500, 400);
}MainWindow* MainWindow::NewInstance()
{MainWindow* ret = new MainWindow();if(!(ret && ret->construct())){delete ret;ret = nullptr;}return ret;
}bool MainWindow::construct()
{bool ret = true;ret = ret && initMenuBar();ret = ret && initToolBar();return ret;
}bool MainWindow::initMenuBar()
{QMenuBar* mb = menuBar();bool ret = (mb != nullptr);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()
{QToolBar* tb = addToolBar("toolbar");bool ret = (tb != nullptr);tb->setIconSize(QSize(16, 16));//tb->setFloatable(false);//tb->setMovable(false);ret = ret && initFileToolItem(tb);ret = ret && initEditToolItem(tb);ret = ret && initFormatToolItem(tb);ret = ret && initViewToolItem(tb);return ret;
}bool MainWindow::initFileMenu(QMenuBar* mb)
{bool ret = true;QMenu* menu = new QMenu("文件(&F)");ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "新建(&N)", Qt::CTRL + Qt::Key_N);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "打开(&O)...", Qt::CTRL + Qt::Key_O);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "保存(&S)", Qt::CTRL + Qt::Key_S);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "另存为(&A)...", 0);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "页面设置(&U)...", 0);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "打印(&P)...", Qt::CTRL + Qt::Key_P);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "退出(&X)...", 0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;ret = false;}return ret;
}bool MainWindow::initEditMenu(QMenuBar* mb)
{bool ret = true;QMenu* menu = new QMenu("编辑(&E)");ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "撤销(&U)", Qt::CTRL + Qt::Key_Z);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "剪切(&T)", Qt::CTRL + Qt::Key_X);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "复制(&C)", Qt::CTRL + Qt::Key_C);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "粘贴(&P)", Qt::CTRL + Qt::Key_V);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "删除(&L)", Qt::Key_Delete);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "查找(&F)...", Qt::CTRL + Qt::Key_F);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "查找下一个(&N)", Qt::Key_F3);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "替换(&R)...", Qt::CTRL + Qt::Key_H);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "转到(&G)...", Qt::CTRL + Qt::Key_G);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "全选(&A)", Qt::CTRL + Qt::Key_A);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "时间/日期(&D)...", Qt::Key_F5);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;ret = false;}return ret;
}bool MainWindow::initFormatMenu(QMenuBar* mb)
{bool ret = true;QMenu* menu = new QMenu("格式(&O)");ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "自动换行(&W)", 0);if(ret){menu->addAction(action);}ret = ret && makeAction(action, "字体(&F)...", 0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;ret = false;}return ret;
}bool MainWindow::initViewMenu(QMenuBar* mb)
{bool ret = true;QMenu* menu = new QMenu("查看(&V)");ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "工具栏(&T)", 0);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "状态栏(&S)", 0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;ret = false;}return ret;
}bool MainWindow::initHelpMenu(QMenuBar* mb)
{bool ret = true;QMenu* menu = new QMenu("帮助(&H)");ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "查看帮助(&H)", 0);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "关于记事本(&A)", 0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete menu;ret = false;}return ret;
}bool MainWindow::initFileToolItem(QToolBar* tb)
{bool ret = true;QAction* action = nullptr;ret = ret && makeAction(action, "新建", ":/Res/pic/new.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "打开", ":/Res/pic/open.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "保存", ":/Res/pic/save.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "保存到", ":/Res/pic/saveas.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "打印", ":/Res/pic/print.png");if(ret){tb->addAction(action);}tb->addSeparator();return ret;
}bool MainWindow::initEditToolItem(QToolBar* tb)
{bool ret = true;QAction* action = nullptr;ret = ret && makeAction(action, "返回", ":/Res/pic/redo.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "撤销", ":/Res/pic/undo.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "剪切", ":/Res/pic/cut.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "复制", ":/Res/pic/copy.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "粘贴", ":/Res/pic/paste.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "查找", ":/Res/pic/find.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "替换", ":/Res/pic/replace.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "转到", ":/Res/pic/goto.png");if(ret){tb->addAction(action);}tb->addSeparator();return ret;
}bool MainWindow::initFormatToolItem(QToolBar* tb)
{bool ret = true;QAction* action = nullptr;ret = ret && makeAction(action, "自动换行", ":/Res/pic/wrap.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "字体", ":/Res/pic/font.png");if(ret){tb->addAction(action);}tb->addSeparator();return ret;
}bool MainWindow::initViewToolItem(QToolBar* tb)
{bool ret = true;QAction* action = nullptr;ret = ret && makeAction(action, "工具栏", ":/Res/pic/tool.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "状态栏", ":/Res/pic/status.png");if(ret){tb->addAction(action);}return ret;
}bool MainWindow::makeAction(QAction*& action, QString text, int key)
{bool ret = true;action = new QAction(text, nullptr);if(action != nullptr){action->setShortcut(QKeySequence(key));}else{ret = false;}return ret;
}bool MainWindow::makeAction(QAction*& action, QString tip, QString icon)
{action = new QAction("", nullptr);bool ret = (action != nullptr);if(ret){action->setToolTip(tip);action->setIcon(QIcon(icon));}return ret;
}MainWindow::~MainWindow()
{
}
main.cpp
#include "MainWindow.h"#include int main(int argc, char *argv[])
{QApplication a(argc, argv);int ret = 0;MainWindow* w = MainWindow::NewInstance();if(w != nullptr){w->show();ret = a.exec();}delete w;return ret;
}
QToolBar
进行工具栏的创建QToolBar
能够加入任意的 QWidget
组件QToolBar
中的元素通常以图标按钮的方式存在