QT菜单之快捷菜单设计

        快捷菜单又称为上下文菜单,通常在用鼠标右击的时候弹出。创建快捷菜单的方法和创建菜单栏菜单类似。

效果图:

        

        一、将MainWindow类对象的ContextMenuPolicy属性设置为customContextMenu。

        打开mainWindow.ui,在属性视图上找到ContextMenuPolicy,并选择CustomContextMenu。

        

        二、创建菜单栏对象

        三、在mainwindow.ui界面鼠标右键选择”转到槽“,接着点击信号对应的CustomContextMenuRequested(QPoint),单击OK。然后编辑槽函数如下

        

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //一级菜单
    menu1 = new QMenu(QString::fromUtf8("编辑"));
    menu1->addAction(QString::fromUtf8("退出"));
    menu1->addAction(QString::fromUtf8("选项"));
    menu1->addAction(QString::fromUtf8("信息"));
    //二级菜单1
    menu2 = new QMenu(QString::fromUtf8("保存为"));
    menu2->addAction(QString::fromUtf8("保存为图片"));
    menu2->addAction(QString::fromUtf8("保存为视频"));
    menu2->addAction(QString::fromUtf8("保存为文本文件"));
    //二级菜单2
    menu3 = new QMenu(QString::fromUtf8("工具栏"));
    menu3->addAction(QString::fromUtf8("缩小"));
    menu3->addAction(QString::fromUtf8("放大"));
    menu3->addAction(QString::fromUtf8("插入"));
    menu3->addAction(QString::fromUtf8("切换"));
    //将二级菜单插入一级菜单栏中
    menu1->addMenu(menu2);
    menu1->addMenu(menu3);
    //初始化为当前页面菜单栏
    this->menuBar()->addMenu(menu1);
}

MainWindow::~MainWindow()
{
    delete ui;
}
//鼠标右键点击显示菜单
void MainWindow::on_MainWindow_customContextMenuRequested(const QPoint &pos)
{
    menu1->exec(mapToGlobal(pos)); // 在鼠标点击位置显示菜单
}

Qt中,ComboBox(组合框)通常用于提供单选列表让用户选择。如果你需要实现二级下拉菜单,也就是所谓的“级联下拉列表”或“树形下拉列表”,你可以使用QTreeWidget配合自定义模型(QStandardItemModel或QAbstractItemModel的派生类)。 以下是简单的步骤: 1. 创建QTreeWidget作为容器: ```cpp QTreeWidget* treeWidget = new QTreeWidget(this); ``` 2. 设置QTreeWidget的基本样式: ```cpp treeWidget->setColumnCount(1); // 只显示一列 treeWidget->setSortingEnabled(true); // 允许排序 ``` 3. 定义QStandardItemModel并填充数据: ```cpp QStandardItemModel model; // 添加一级节点 QStandardItem *rootItem = new QStandardItem("一级菜单"); for (const auto& item : firstLevelItems) { QStandardItem *childItem = new QStandardItem(item); rootItem->appendRow(childItem); // 如果需要二级菜单,添加到对应的子节点 if (item == "二级菜单") { // 这里假设有一个特定的一级项对应二级菜单 QTreeWidget *subTree = new QTreeWidget(); subTree->setModel(new QStandardItemModel(subTree)); // 填充二级菜单... } } model.appendRow(rootItem); treeWidget->setModel(&model); ``` 4. 当用户点击一级菜单时,展开相应的二级菜单: ```cpp QObject::connect(treeWidget, &QTreeWidget::itemClicked, [this](QTreeWidgetItem *item) { if (!item || item->parent()) { return; // 点击了根节点或其他非子节点,不做处理 } // 展开二级菜单 if (dynamic_cast<QTreeWidgetItem*>(item)->text(0) == "二级菜单") { // 显示二级菜单... } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值