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*)));
按钮菜单
在界面中放入一个按钮,绑定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);
}
}