QT基础:QMenuBar、QToolBar、QStatusBar 综合基本演示

本文主要演示 Widget 中的 QMenuBar 控件的 二级菜单三级菜单信号槽的演示,添加图标设置单选和多选绑定快捷键,还有QToolBarQStatusBar 的简单演示,适合初学者食用:

1、首先打开Qt Creator 创建一个 widget 项目

 (然后在UI上顺便画一个按钮,添加一个动作,备用)

QT基础:QMenuBar、QToolBar、QStatusBar 综合基本演示_第1张图片

 2、代码演示,篇幅原因,槽函数的声明在头文件中,这里就不放出来了,下面的是 widget.cpp内的代码

#include "widget.h"
#include "ui_widget.h"
#include 
#include 
#include 
#include 

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 创建菜单栏
    QMenuBar *mb = new QMenuBar(this);
    // 设置宽度为 widget 宽度
    mb->resize(this->width(),mb->height());
    // 创建菜单  一级菜单
    m1 = mb->addMenu("文件");     // m1为私有成员变量,添加在了头文件中
    QMenu *m2 = mb->addMenu("编辑");
    QMenu *m3 = mb->addMenu("构建");

    // 二级菜单
    QMenu *e1 = m1->addMenu("新建文件");    // 创建Action以后就无法在Action下继续创建菜单了
    QAction *e2 = m1->addAction("保存文件");
    QAction *e3 = m1->addAction("关闭文件");
    QAction *e4 = m1->addAction("退出");
    m2->addAction(ui->actioncopy);

    // 三级菜单
    QAction *n1 = e1->addAction("新建.cpp");
    QAction *n2 = e1->addAction("新建.ui");


    // 写入图标
    e1->setIcon(QIcon("C:/Users/patient/Pictures/Saved Pictures/小黄鸡IKUN篮球.jpg"));
    e4->setIcon(QIcon("C:/Users/patient/Pictures/Saved Pictures/R-k.gif"));

    QObject::connect(n1,SIGNAL(triggered()),this,SLOT(click()));
    QObject::connect(e4,SIGNAL(hovered()),this,SLOT(hover()));

    // 只有Menu类型才能有这个信号,所有子节点都能触发
    QObject::connect(m1,SIGNAL(triggered(QAction*)),this,SLOT(click(QAction*)));
    QObject::connect(mb,SIGNAL(hovered(QAction*)),this,SLOT(hover(QAction*)));

    // 是否被选中
    QObject::connect(e3,SIGNAL(triggered(bool)),this,SLOT(pitchOn(bool)));

    // 菜单栏子节点单选、多选
    e2->setCheckable(true);     // 开启多选
    e3->setCheckable(true);
    e4->setCheckable(true);
    // 编组,进行单选
    QActionGroup *ag = new QActionGroup(this);
    ag->addAction(e2);
//    ag->addAction(e3);
    ag->addAction(e4);
    ag->setEnabled(true);

    // 给按钮设置快捷键
    ui->pushButton->setShortcut(QString("ctrl+a"));
    e2->setShortcut(QString("ctrl+s"));

    
    ///工具栏
    // 创建工具栏
    QToolBar *tb = new QToolBar(this);
    // 写入 X Y 宽 高
    tb->setGeometry(0,mb->height(),this->width(),30);
    // 写入图标大小
    tb->setIconSize(QSize(30,30));
    // 添加 Action
    tb->addAction(e4);

    
    /// 状态栏
    // 创建状态栏
    QStatusBar *sb = new QStatusBar(this);
    // 写入 X Y 宽 高
    sb->setGeometry(0,height()-30,this->width(),30);
    // 提示消息,3秒后消失
    sb->showMessage(QStringLiteral("欢迎使用状态栏"),3000);
}

Widget::~Widget()
{
    delete ui;
}

// 槽函数
// 点击事件
void Widget::click()
{
    qDebug() << "触发:新建文件";
}

void Widget::hover()
{
    qDebug() << "鼠标悬浮";
}

void Widget::click(QAction * act)
{
    qDebug() << act->text();
}

void Widget::hover(QAction * act)
{
    if(act->text() == "构建")
    {
       qDebug() << "清理子节点,重新生成子节点";
       act->menu()->clear();
       act->menu()->addAction("构建所有项目");
       act->menu()->addAction("执行qmake");
       act->menu()->addAction("运行");
    }
}

void Widget::pitchOn(bool change)
{
    qDebug() << "选中状态变更为:" << change;
}

void Widget::buttonClick()
{
    // 鼠标位置显示菜单
    m1->exec(QCursor::pos());
}

 3、主要演示了 QMenuBar 的信号:

QMenu 的信号:
triggered(QAction*) 触发信号,传出一个 Action
hovered(QAction*)   鼠标悬浮信号,传出一个 Action
QAction 的信号:
hovered()        鼠标悬浮信号
triggered()      触发信号
triggered(bool)  触发信号

 

4、演示效果

( pro文件中加入一行 CONFIG += console 即可打开控制台)

QT基础:QMenuBar、QToolBar、QStatusBar 综合基本演示_第2张图片

 5、注意事项:

UI 中间的按钮绑定了一个槽函数 buttonClick , 这个是通过设计师绑定的,所以代码中没有写,也可以自己在代码中用 QObject::connect 绑定也行

m1 是在头文件中的一个私有成员, QMenu *m1     

你可能感兴趣的:(Widget,QT,Demo,qt,开发语言,c++)