1.QMenuBar-菜单栏
菜单栏,顾名思义是一个管理的菜单的框,所以需要我们向里面添加菜单
//创建菜单栏
auto *bar=menuBar();
//向菜单栏当中添加菜单
auto munu=new QMenu("wenjian");
bar->addMenu("文件");
bar->addMenu(munu);
这里我们看到,可以new一个菜单进行添加,也可以把已有的菜单控件添加进去
//向菜单栏中添加动作,就像套娃一样
munu->addMenu("打开文件");
auto nn=new QAction("ddd");
//选择是否可以选中
nn->setCheckable(true);
munu->addAction(nn);
//给动作添加快捷键,alt+A就是快捷键
auto yy=new QMenu("快捷键(&A)");
bar->addMenu(yy);
点击wenjian就可以看到我们设置的菜单的动作
//添加快捷键
munu->addAction("剪切",this,SIGNAL(cut),QKeySequence("ctrl+X"));
munu->addAction("剪切",this,&Mainwindow::cut,QKeySequence("ctrl+X"));
cut是自己写的一个槽函数,里面是qInfo()<<__FUNCTION__;
//下面就是菜单栏的几个信号举例
connect(bar,&QMenuBar::hovered,this,[](QAction*act)
{
qInfo()<<"hovered"<<act->text();
});
connect(bar,&QMenuBar::triggered,this,[](QAction*act)
{
qInfo()<<"triggered"<<act->text();
});
我们可以看到下面输出器做的输出(不知道为什么,汉字字符还是输出不出来,是没有汉字库吗?)
2.QtoolBar-工具栏
QtoolBar和QMenuBar差不多的,但菜单栏只能有一个而工具栏可以有很多个
//添加工具栏
auto tbar= addToolBar("工具栏");
//给工具栏添加按钮
auto tbtn=new QToolButton;
tbtn->setText("打开工具");
tbar->addWidget(tbtn);
auto menu=new QMenu(this);
tbtn->setMenu(menu);
//添加图片
menu->setIcon(QIcon("111.png"));
//允许浮动,在两个工具栏可以拖动工具栏.
tbar->setFloatable(true);
是可以进行拖动的,就和我们使用的软件中的工具栏一样
3.QStatusBar-状态栏
这样的就是状态栏
可以向里面添加QWidget的子类控件,像是QPushButton QComboBox QLabel都是可以的、
//创建状态栏
auto ssb= statusBar();
//auto ssb=new QStatusBar(this);
//添加控件。这是我们之前学到的下拉复选框
auto aa=new QComboBox();
aa->addItem("y");
aa->addItem("m");
ssb->addWidget(new QLabel("标签"));
ssb->addWidget(aa);
//ssb->addWidget(new QComboBox());
auto btn=new QPushButton("这是一个按钮");
ssb->addWidget(btn);
connect(btn,&QPushButton::clicked,this,[=]()
{
//弹出一个消息框,会覆盖掉之前的按钮,后面的是延迟弹出的时间
ssb->showMessage("这是一个消息框",2000);
});
4.QDockWidget-浮动窗口,是和中心窗口相对的
我们可以看到左侧就是浮动窗口,这里的设置是靠左的,我们这里是写了三个浮动窗口,可以给窗口添加控件哈
//添加中心窗口
setCentralWidget(new QPlainTextEdit);
auto dwidget1=new QDockWidget("第一个浮动窗口",this);
auto dwidget2=new QDockWidget("第二个浮动窗口",this);
auto dwidget3=new QDockWidget("第三个浮动窗口",this);
addDockWidget(Qt::DockWidgetArea::LeftDockWidgetArea,dwidget1);
addDockWidget(Qt::DockWidgetArea::LeftDockWidgetArea,dwidget2);
addDockWidget(Qt::DockWidgetArea::LeftDockWidgetArea,dwidget3);
dwidget1->setTitleBarWidget(new QPushButton("标题按钮"));
//tabifyDockWidget将第二个停靠部件移动到第一个停靠部件的顶部,在主窗口中创建一个选项卡停靠区域。
tabifyDockWidget(dwidget1,dwidget2);
tabifyDockWidget(dwidget2,dwidget3);
5.QSystemTrayIcon-托盘按钮-有一点是我们必须要给它添加图片,不然你找不到
托盘按钮是什么呢,我们电脑上可能有这些小图标放在托盘里
我们也是可以自定义一个托盘按钮来控制我们窗口的一些事件的,例如关闭,隐藏最小化什么的
右下角的就是我们自己新建的
trayIcon=new QSystemTrayIcon(QIcon("://icon/2.png"),this);
trayIcon->show();
QMenu *menu=new QMenu;
//设置打开后就关闭
//menu->addAction("打开",this,&QMainWindow::close);
menu->addAction("退出",qApp,&QApplication::quit);
trayIcon->setContextMenu(menu);
menu->addSeparator();
menu->addAction("最小化到托盘",[=]()
{
控制窗口的visib属性
setVisible(!this->isVisible());
});
auto bb=new QLabel("sss",this);
//先来一个message
auto aa=new QPushButton("按钮",this);
bb->move(100,0);
bb->show();
connect(aa,&QPushButton::clicked,this,&Mainwindow::cut);
//根据托盘的激活原因进行处理
connect(trayIcon,&QSystemTrayIcon::activated,this,[=](QSystemTrayIcon::ActivationReason resaon)
{
switch (resaon) {
case QSystemTrayIcon::Unknown: //不知名原因
bb->setText("不知名原因");
break;
case QSystemTrayIcon::DoubleClick: //双击
bb->setText("双击");
break;
case QSystemTrayIcon::Context: //右击
bb->setText("右击");
break;
case QSystemTrayIcon::MiddleClick: //中键
bb->setText("中键");
break;
case QSystemTrayIcon::Trigger: //左键
bb->setText("左键");
break;
default:
break;
}
});