QT中的QMenuBar控件及其相关函数

现在我们要实现一个以下下拉菜单的功能

第一步:设置菜单栏menubar上的内容 也就是“颜色”和设置菜单栏选项(蓝 绿 白)以及将菜单选项设置为可选 最后将三个菜单栏选项的信号函数与之自定义的槽函数相连

根据自己需求也可以设置图标

mainwindows.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QList>
#include <QPen>
struct linepen
{
    QList<QPoint> pointList;
    QPen pen;
};


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void paintEvent(QPaintEvent *event);


    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);

    bool isDown = false;//鼠标是否按下
    QPoint startPoint;//画线的起始位置
    QPoint endPoint;//画线的终点位置

    QList<linepen> lineList;//存放链表的链表
    QList<QPoint> pointList;//用来存放点的LIST
    QPen pen;
    QAction * pblue;
    QAction * pgreen;
    QAction * pred;

private slots:
    void on_comboBox_currentIndexChanged(const QString &arg1);
    void menu_action_clicked(bool checked);

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindows.cpp

    //菜单
    QMenu * pmenu = ui->menubar->addMenu("颜色"); //设置菜单栏上的内容
    
    QIcon blueIcon(":/微信图片_20240806182844.jpg"); //设置图标
    //设置菜单栏下选项
    pblue = pmenu->addAction(blueIcon,"蓝色");
    pblue->setObjectName("蓝色");
    //    QIcon blueIcon(":/微信图片_20240806182844.jpg"); //设置图标
    //    pblue->setIcon(blueIcon);
    pblue->setCheckable(true);
    
    
    pgreen = pmenu->addAction("绿色");//设置菜单文本内容
    pgreen->setObjectName("绿色");//设置控件名字
    pgreen->setCheckable(true); //设置菜单选项为可选
    
    pred =  pmenu->addAction("红色");
    pred->setObjectName("红色");
    pred->setCheckable(true);
    
    //将三个菜单选项的点击信号
    connect(pblue, &QAction::triggered, this, &MainWindow::menu_action_clicked);
    connect(pgreen, &QAction::triggered, this, &MainWindow::menu_action_clicked);
    connect(pred, &QAction::triggered, this, &MainWindow::menu_action_clicked);

我们使用三个connect函数使得三个选项的点击信号连接至同一个槽函数

QAction中的setCheckable(true)函数设置了选项有可选的权限

第二步槽函数实现功能(如何将三个按键协调至只有一个能被勾选)//三选一

下面是槽函数的具体实现

//信号函数的参数可传递至槽函数 这里bool checked这个参数被传递
void MainWindow::menu_action_clicked(bool checked)
{
    //初始化三个选项为不勾选
    pblue->setChecked(false);
    pgreen->setChecked(false);
    pred->setChecked(false);
    qDebug()<<checked<<endl;
    qDebug()<<sender()->objectName()<<endl;
    
    //判定只有有选项被点击才才会执行之后的代码
    if(checked == true)
    {
        if(sender()->objectName() == "蓝色")
        {
            pen.setColor(Qt::blue);
            pblue->setChecked(true); //设置勾选
        }
        if(sender()->objectName() == "绿色")
        {
            pen.setColor(Qt::green);
            pgreen->setChecked(true);
            //       pen.setWidth(5);
        }
        if(sender()->objectName() == "红色")
        {
            pen.setColor(Qt::red);
            pred->setChecked(true);
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值