Qt 28 主窗口中的工具栏 模仿Windows文本编辑器界面 菜单栏+工具栏

学习自唐佐林老师Qt


在这里插入图片描述在这里插入图片描述

在这里插入图片描述如:
设置菜单栏不可以悬浮
setFloatable(false);

设置菜单栏不可以停靠
tb->setMovable(false);

调整工具栏大小
setIconSize(QSize(16, 16));
在这里插入图片描述
实验1 工具栏使用:

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "MainWindow.h"
#include <QToolBar>
#include <QAction>
#include <QIcon>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    //创建工具栏对象
    QToolBar* tb = addToolBar("Tool Bar");
    //创建快捷项
    QAction* action = new QAction("", NULL);
    //设置菜单栏不可以悬浮
    tb->setFloatable(false);
    //设置菜单栏不可以停靠
    tb->setMovable(false);
    //设置提示的标签
    action->setToolTip("Open");
    //设置图标
    action->setIcon(QIcon(":/Res/open.png"));
    //向 快捷项 添加到 工具栏对象
    tb->addAction(action);
    //创建 按钮,标签,输入文本框
    QPushButton* b = new QPushButton("Button");
    QLabel* l = new QLabel("Label");
    QLineEdit* e = new QLineEdit();
    //将 按钮,标签,输入文本框 加入到工具栏
    tb->addWidget(b);
    tb->addWidget(l);
    tb->addWidget(e);
}
MainWindow::~MainWindow()
{
    
}

main.cpp

#include <QtGui/QApplication>
#include "MainWindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();
}

在这里插入图片描述

实验2: 文本编辑器:菜单栏+工具栏

mainwindow.h

#ifndef _MAINWINDOW_H_
#define _MAINWINDOW_H_
#include <QtGui/QMainWindow>
#include <QKeySequence>
#include <QMenuBar>
#include <QToolBar>
#include <QAction>
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 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 <QMenu>
#include <QIcon>
#include <QSize>
MainWindow::MainWindow()
{
}
MainWindow* MainWindow::NewInstance()
{
    MainWindow* ret = new MainWindow();
    if( (ret == NULL) || !ret->construct() )
    {
        delete ret;
        ret = NULL;
    }
    return ret;
}
bool MainWindow::construct()
{
    bool ret = true;
    ret = ret && initMenuBar();
    ret = ret && initToolBar();
    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("Tool Bar");
    //调整工具栏大小
    tb->setIconSize(QSize(16, 16));
    //向工具栏添加快捷项
    ret = ret && initFileToolItem(tb);
    return ret;
}
//菜单栏 - >下拉菜单组File(&F) -> 菜单组项子项对象
bool MainWindow::initFileMenu(QMenuBar* mb)
{
    //创建 文件 下拉菜单组对象
    QMenu* menu = new QMenu("File(&F)");
    bool ret = (menu != NULL);
    if( ret )
    {
        //创建菜单项子项对象
        QAction* action = NULL;
        //创建 下拉菜单项子项New  参数:下拉菜单项子项 对象,菜单项标题New(&N),快捷键Qt::CTRL + Qt::Key_N
        ret = ret && makeAction(action, "New(&N)", Qt::CTRL + Qt::Key_N);
        if( ret )
        {
            menu->addAction(action);
        }
        //创建 下拉菜单项子项Open  参数:下拉菜单项子项 对象,菜单项标题Open(&O),快捷键Qt::CTRL + Qt::Key_N
        ret = ret && makeAction(action, "Open(&O)...", Qt::CTRL + Qt::Key_O);
        if( ret )
        {
            menu->addAction(action);
        }
        //创建 下拉菜单项子项Save 参数:下拉菜单项子项 对象,菜单项标题Save(&S),快捷键Qt::CTRL + Qt::Key_N
        ret = ret && makeAction(action, "Save(&S)", Qt::CTRL + Qt::Key_S);
        if( ret )
        {
            menu->addAction(action);
        }
        //创建 下拉菜单项子项Save As 参数:下拉菜单项子项 对象,菜单项标题Save As(&A),快捷键Qt::CTRL + Qt::Key_N
        ret = ret && makeAction(action, "Save As(&A)...", 0);
        if( ret )
        {
            menu->addAction(action);
        }
        menu->addSeparator();
        //创建 下拉菜单项子项Print 参数:下拉菜单项子项 对象,菜单项标题Print,快捷键Qt::CTRL + Qt::Key_N
        ret = ret && makeAction(action, "Print(&P)...", Qt::CTRL + Qt::Key_P);
        if( ret )
        {
            menu->addAction(action);
        }
        menu->addSeparator();
        //创建 下拉菜单项子项Exit 参数:下拉菜单项子项 对象,菜单项标题Exit(&X),快捷键Qt::CTRL + Qt::Key_N
        ret = ret && makeAction(action, "Exit(&X)", 0);
        if( ret )
        {
            menu->addAction(action);
        }
    }
    if( ret )
    {
        mb->addMenu(menu);
    }
    else
    {
        delete menu;
    }
    return ret;
}
//菜单栏 - >下拉菜单组Edit(&F) -> 菜单组项子项对象
bool MainWindow::initEditMenu(QMenuBar* mb)
{
    QMenu* menu = new QMenu("Edit(&E)");
    bool ret = (menu != NULL);
    if( ret )
    {
        QAction* action = NULL;
        //创建 下拉菜单项子项Undo 参数:下拉菜单项子项 对象,菜单项标题Undo,快捷键Qt::CTRL + Qt::Key_Z
        ret = ret && makeAction(action, "Undo(&U)", Qt::CTRL + Qt::Key_Z);
        if( ret )
        {
            menu->addAction(action);
        }
        ret = ret && makeAction(action, "Redo(&R)...", Qt::CTRL + Qt::Key_Y);
        if( ret )
        {
            menu->addAction(action);
        }
        menu->addSeparator();
        ret = ret && makeAction(action, "Cut(&T)", Qt::CTRL + Qt::Key_X);
        if( ret )
        {
            menu->addAction(action);
        }
        ret = ret && makeAction(action, "Copy(&C)...", Qt::CTRL + Qt::Key_C);
        if( ret )
        {
            menu->addAction(action);
        }
        ret = ret && makeAction(action, "Paste(&P)...", Qt::CTRL + Qt::Key_V);
        if( ret )
        {
            menu->addAction(action);
        }
        ret = ret && makeAction(action, "Delete(&L)", Qt::Key_Delete);
        if( ret )
        {
            menu->addAction(action);
        }
        menu->addSeparator();
        ret = ret && makeAction(action, "Find(&F)...", Qt::CTRL + Qt::Key_F);
        if( ret )
        {
            menu->addAction(action);
        }
        ret = ret && makeAction(action, "Replace(&R)...", Qt::CTRL + Qt::Key_H);
        if( ret )
        {
            menu->addAction(action);
        }
        ret = ret && makeAction(action, "Goto(&G)...", Qt::CTRL + Qt::Key_G);
        if( ret )
        {
            menu->addAction(action);
        }
        menu->addSeparator();
        ret = ret && makeAction(action, "Select All(&A)", Qt::CTRL + Qt::Key_A);
        if( ret )
        {
            menu->addAction(action);
        }
    }
    if( ret )
    {
        mb->addMenu(menu);
    }
    else
    {
        delete menu;
    }
    return ret;
}
//菜单栏 - >下拉菜单组Format(&O) -> 菜单组项子项对象
bool MainWindow::initFormatMenu(QMenuBar* mb)
{
    QMenu* menu = new QMenu("Format(&O)");
    bool ret = (menu != NULL);
    if( ret )
    {
        QAction* action = NULL;
        ret = ret && makeAction(action, "Auto Wrap(&W)", 0);
        if( ret )
        {
            menu->addAction(action);
        }
        ret = ret && makeAction(action, "Font(&F)...", 0);
        if( ret )
        {
            menu->addAction(action);
        }
    }
    if( ret )
    {
        mb->addMenu(menu);
    }
    else
    {
        delete menu;
    }
    return ret;
}
//菜单栏 - >下拉菜单组View(&V) -> 菜单组项子项对象
bool MainWindow::initViewMenu(QMenuBar* mb)
{
    QMenu* menu = new QMenu("View(&V)");
    bool ret = (menu != NULL);
    if( ret )
    {
        QAction* action = NULL;
        ret = ret && makeAction(action, "Tool Bar(&T)", 0);
        if( ret )
        {
            menu->addAction(action);
        }
        ret = ret && makeAction(action, "Status Bar(&S)", 0);
        if( ret )
        {
            menu->addAction(action);
        }
    }
    if( ret )
    {
        mb->addMenu(menu);
    }
    else
    {
        delete menu;
    }
    return ret;
}
//菜单栏 - >下拉菜单组Help(&H) -> 菜单组项子项对象
bool MainWindow::initHelpMenu(QMenuBar* mb)
{
    QMenu* menu = new QMenu("Help(&H)");
    bool ret = (menu != NULL);
    if( ret )
    {
        QAction* action = NULL;
        ret = ret && makeAction(action, "User Manual", 0);
        if( ret )
        {
            menu->addAction(action);
        }
        ret = ret && makeAction(action, "About NotePad...", 0);
        if( ret )
        {
            menu->addAction(action);
        }
    }
    if( ret )
    {
        mb->addMenu(menu);
    }
    else
    {
        delete menu;
    }
    return ret;
}
//向工具栏添加快捷项
bool MainWindow::initFileToolItem(QToolBar* tb)
{
    bool ret = true;
    QAction* action = NULL;
   //makeAction重载2 参数:工具栏快捷项 对象,快捷项标题,快捷键图标路径
    ret = ret && makeAction(action, "New", ":/res/pic/new.png");
    if( ret )
    {
        tb->addAction(action);
    }
    ret = ret && makeAction(action, "Open", ":/res/pic/open.png");
    if( ret )
    {
        tb->addAction(action);
    }
    return ret;
}
//makeAction 重载1  参数:下拉菜单项子项 对象,菜单项标题,快捷键
bool MainWindow::makeAction(QAction*& action, QString text, int key)
{
    bool ret = true;
    //创建 下拉菜单项子项 对象
    action = new QAction(text, NULL);
    if( action != NULL )
    {
        //设置快捷键
        action->setShortcut(QKeySequence(key));
    }
    else
    {
        ret = false;
    }
    return ret;
}
//makeAction 重载2  参数:工具栏快捷项 对象,快捷项标题,快捷键图标路径
bool MainWindow::makeAction(QAction*& action, QString tip, QString icon)
{
    bool ret = true;
    action = new QAction("", NULL);
    if( action != NULL )
    {
        //设置提示的标签
        action->setToolTip(tip);
        //设置图标
        action->setIcon(QIcon(icon));
    }
    else
    {
        ret = false;
    }
    return ret;
}
MainWindow::~MainWindow()
{
}

main.cpp

#include <QtGui/QApplication>
#include "MainWindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow* w = MainWindow::NewInstance();
    int ret = -1;
    if( w != NULL )
    {
        w->show();
        ret = a.exec();
    }
    delete w;
    return ret;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux老A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值