Qt下拉菜单

1,QComboBox

2,setMenu()---设置下拉菜单

AI对话未来丨智能写作对话:

`setMenu()`是`QWidget`类的一个成员函数,在`Qt`中用于将一个菜单作为一个控件的下拉菜单设置。具体来说,它会把相应的菜单对象与该控件关联,并在控件上添加下拉箭头来表示该控件有一个下拉菜单。

以下是`setMenu()`函数的使用示例:

```cpp

QMenu *menu = new QMenu(this); // 创建一个QMenu对象

menu->addAction("Action 1"); // 为菜单添加一个操作

menu->addAction("Action 2"); // 为菜单添加另一个操作

QPushButton *button = new QPushButton(this); // 创建一个QPushButton对象

button->setText("Button"); // 设置按钮的文本

button->setMenu(menu); // 设置按钮的下拉菜单为menu对象

```

在上面的代码中,我们首先创建了一个`QMenu`对象,并给它添加了两个`QAction`对象,然后创建了一个`QPushButton`对象,并将上述`QMenu`对象和该按钮对象关联。此时,该按钮控件右边会出现下拉箭头,用户可以点击它来显示和选择下拉菜单中的操作。

需要注意的是,`setMenu()`函数只能用于某些具有下拉菜单功能的控件(比如`QPushButton`、`QToolButton`、`QComboBox`等)。如果该控件已经有一个下拉菜单了,则使用`setMenu()`函数将替换原有的菜单。如果

AI对话未来丨智能写作对话:

该控件上尚未设置任何下拉菜单,则使用`setMenu()`函数将新设置一个下拉菜单。

因为控件是按钮,所以此时点击按钮就会弹出下来菜单;

action---setmenu

如果控件不是按钮,而是工具栏的action,点击也不出现下来菜单。

设置action对象点击按钮就显示下拉菜单

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->pushButton->setMenu(ui->menu_open);
    ui->actToolOpen->setMenu(ui->menu_open);
    connect(ui->actToolOpen,&QAction::hovered,[this]{
        // 获取QAction所在位置的矩形
        QRect rect = ui->toolBar->widgetForAction(ui->actToolOpen)->rect();
        // 转换为全局坐标系下的位置
        //QPoint pos =  ui->toolBar->widgetForAction(ui->actToolOpen)->mapToGlobal(rect.bottomLeft());
        QPoint pos =  ui->toolBar->widgetForAction(ui->actToolOpen)->mapToGlobal(rect.bottomLeft());
        // 显示下拉菜单
        ui->menu_open->popup(pos); 
    });
}

MainWindow::~MainWindow()
{
    delete ui;
}

widgetForAction()

`widgetForAction()`函数是`QWidget`类的一个成员函数,用于获取与给定`QAction`对象相关联的`QWidget`部件(再利用这个widget可以获取widget的其他属性)。

该函数原型如下:

```cpp

QWidget *QWidget::widgetForAction(QAction *action) const

```

该函数接受一个`QAction`对象作为参数,并返回一个指向该对象关联的`QWidget`的指针。如果该`QAction`在窗口部件中没有相关联的部件,则该函数返回一个`NULL`指针。

通常情况下,我们可以在`QToolBar`中使用`widgetForAction()`函数来获取与工具栏中的`QAction`对象相关联的工具栏部件,然后使用该部件来计算下拉菜单的位置和大小等。例如,在使用一个包含下拉菜单的`QAction`对象时,我们可以使用该`QAction`关联的部件,计算其所在位置和大小,并将下拉菜单的位置和大小相应地进行设置。

以下是一个示例:

```cpp

QToolBar *toolbar = new QToolBar(this); // 创建一个工具栏

// 在工具栏中添加一个包含下拉菜单的QAction对象

QAction *action = new QAction("Tool Item", this);

QMenu *menu = new QMenu(this);

menu->addAction("Sub Item 1");

menu->addAction("Sub Item 2");

action->s

AI对话未来丨智能写作对话:

etMenu(menu);

toolbar->addAction(action);

// 获取与QAction对象相关联的工具栏部件,并计算其大小与位置

QWidget *widget = toolbar->widgetForAction(action);

QRect rect = widget->geometry();

QPoint pos = widget->mapToGlobal(rect.bottomLeft());

// 显示下拉菜单

menu->popup(pos);

```

在上述代码中,我们首先创建了一个工具栏`toolbar`,并在其中添加一个包含下拉菜单的`QAction`对象。接着,我们使用`widgetForAction()`函数获取该`QAction`对象相关联的工具栏部件,并计算其位置和矩形大小。最后,我们在相应位置调用`popup()`函数来显示下拉菜单。

需要注意的是,`widgetForAction()`函数并不保证返回的部件是一个`QAction`部件,而是返回与给定`QAction`相关联的部件。在实际使用中,我们需要根据具体情况来判断该部件是否合适。

相关推荐
PyAIGCMaster1 分钟前
第二周补充:Go语言中&取地址符与fmt函数详解
开发语言·后端·golang
~kiss~7 分钟前
Rust学习~tokio简介
开发语言·学习·rust
Mr.Wang80920 分钟前
条款23:宁以non-member、non-friend替换member函数
开发语言·c++
关关钧36 分钟前
【R语言】读取CSV数据时,显示[1] PK...<0 行> (或0-长度的row.names)
开发语言·r语言
以卿a2 小时前
C++ 模板初阶
开发语言·c++
s:1032 小时前
【框架】参考 Spring Security 安全框架设计出,轻量化高可扩展的身份认证与授权架构
java·开发语言
道不尽世间的沧桑2 小时前
第17篇:网络请求与Axios集成
开发语言·前端·javascript
久绊A3 小时前
Python 基本语法的详细解释
开发语言·windows·python
软件黑马王子6 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
cpp_learners6 小时前
QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,压缩进度
qt·zlib·加密压缩·quazip