QMainWindow中的控件应用

本文介绍了Qt框架中的菜单栏(QMenuBar)、工具栏(QToolBar)、状态栏(QStatusBar)、浮动窗口(QDockWidget)以及托盘按钮(QSystemTrayIcon)的使用方法,包括添加菜单、动作、快捷键,以及与窗口事件的交互。
摘要由CSDN通过智能技术生成

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;
        }

    });

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值