Qt 第28课、主窗口中的工具栏
创始人
2025-05-28 07:02:25
0

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;
}

在这里插入图片描述

  • 小结:
    — 工具栏是集成各种功能的一个快捷区域
    — Qt 通过 QToolBar 进行工具栏的创建
    QToolBar 能够加入任意的 QWidget 组件
    QToolBar 中的元素通常以图标按钮的方式存在

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...