Hello,Qt5(11)

QMenuBar菜单栏

属性

QMenu:可以包含二级三级菜单

QAction:最后一级,可以绑定菜单事件

#include<QMenuBar>

MenuWidget::MenuWidget(QWidget *parent)
    : QWidget(parent)
{
    //插入菜单栏
    QMenuBar *m = new QMenuBar(this);
    m->resize(width(), m->height());
    //一级菜单
    QMenu *m1 = m->addMenu(QStringLiteral("菜单1"));
    QMenu *m2 = m->addMenu(QStringLiteral("菜单2"));
    QMenu *m3 = m->addMenu(QStringLiteral("菜单3"));

    //二级菜单
    QAction *a1 = m1->addAction(QStringLiteral("二级菜单1.1"));
    //设置快捷键
    a1->setShortcut(QString("Ctrl+A"));
    a1->setIcon(QIcon("test.jpg"));
    QAction *a2 = m1->addAction(QStringLiteral("二级菜单1.2"));
    QAction *a3 = m1->addAction(QStringLiteral("二级菜单1.3"));
    a3->setIcon(QIcon("test.jpg"));
    QMenu *m14 = m1->addMenu(QStringLiteral("二级菜单1.4"));
    m14->setIcon(QIcon("test.jpg"));

    //设置单选
    a1->setCheckable(true);
    a2->setCheckable(true);
    a3->setCheckable(true);

    QActionGroup *ag = new QActionGroup(this);
    ag->addAction(a1);
    ag->addAction(a2);
    ag->addAction(a3);
    ag->setExclusive(true);

    //三级菜单
    m14->addAction(QStringLiteral("三级菜单1.4.1"));
}

信号

hovered() 悬浮触发

triggered()

triggered(QAction*)

menuwidget.h

public slots:
    void Hover()
    {
        qDebug() << "Hover";
    }
    void Action1()
    {
        qDebug() << "Action1";
    }
    void Action1(bool flag)
    {
        qDebug() << "Action1" << flag;
    }
    void Action(QAction* action)
    {
        qDebug() << action->text();
    }

menuwidget.cpp

    //一级菜单
    QMenu *m1 = m->addMenu(QStringLiteral("菜单1"));
    //包含所有子级的触发
    connect(m1, SIGNAL(triggered(QAction*)), this, SLOT(Action(QAction*)));

    //二级菜单
    QAction *a1 = m1->addAction(QStringLiteral("二级菜单1.1"));
    connect(a1, SIGNAL(triggered()), this, SLOT(Action1()));
    QAction *a2 = m1->addAction(QStringLiteral("二级菜单1.2"));
    connect(a2, SIGNAL(hovered()), this, SLOT(Hover()));
    
    //设置单选
    a1->setCheckable(true);
    connect(a1, SIGNAL(triggered(bool)), this, SLOT(Action1(bool)));

动态加载

menuwidget.h

void Hover(QAction* action)
    {
        //动态加载
        if (action->text() == QStringLiteral("菜单3"))
        {
            action->menu()->clear();
            action->menu()->addAction(QStringLiteral("菜单3.1"));
            action->menu()->addAction(QStringLiteral("菜单3.2"));
            action->menu()->addAction(QStringLiteral("菜单3.3"));
        }
    }

menuwidget.cpp

connect(m, SIGNAL(hovered(QAction*)), this, SLOT(Hover(QAction*)));

按钮菜单

  1. 在界面中放入一个按钮,绑定Click()槽

void Click()
{
    //指定菜单在光标处显示
    m1->exec(QCursor::pos());
}

QToolBar工具栏

    QToolBar *tbar = new QToolBar(this);
    tbar->setGeometry(0, m->height(), width(), 30);
    tbar->setIconSize(QSize(30, 30));
    tbar->addAction(a1);

QStatusBar状态栏

    QStatusBar *sbar = new QStatusBar(this);
    sbar->setGeometry(0, height() - 30, width(), 30);
    //实现消息定时消失
    sbar->showMessage(QStringLiteral("测试消息三秒消失!"), 3000);

QMainWindow

TestQMenu::TestQMenu(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    
    //菜单栏
    this->menuBar()->addAction("testMenu1");
    
    //状态栏
    this->statusBar()->showMessage("status Bar");

    //工具栏
    ui.mainToolBar->addAction(QStringLiteral("按钮一"));
    ui.mainToolBar->addAction(QIcon("test.jpg"), QStringLiteral("按钮二"));
    //文字显示在图标下面
    ui.mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

    //工具栏换行
    this->addToolBarBreak();

    //默认顶部插入
    QToolBar *t2 = this->addToolBar("tool2");
    t2->addAction(QStringLiteral("顶部"));

    //左侧
    {
        QToolBar *t = new QToolBar(this);
        t->addAction(QStringLiteral("左侧"));
        this->addToolBar(Qt::LeftToolBarArea, t);
    }

    //右侧
    {
        QToolBar *t = new QToolBar(this);
        t->addAction(QStringLiteral("右侧"));
        this->addToolBar(Qt::RightToolBarArea, t);
    }

    //底部
    {
        QToolBar *t = new QToolBar(this);
        t->addAction(QStringLiteral("底部"));
        this->addToolBar(Qt::BottomToolBarArea, t);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值