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`相关联的部件。在实际使用中,我们需要根据具体情况来判断该部件是否合适。


 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要从云端获取下拉菜单的列表内容,你需要进行以下步骤: 1. 在云端创建一个API,用于获取下拉菜单的列表内容。这个API可以返回一个JSON格式的数据,其中包含下拉菜单中的所有选项。 2. 在QT中使用QNetworkAccessManager类,发送HTTP请求到云端API,以获取下拉菜单列表内容的JSON数据。 3. 在QT中解析JSON数据,提取下拉菜单列表的选项内容,并将其添加到QT下拉菜单控件中。 下面是一个简单的示例代码,演示了如何从云端获取下拉菜单列表内容: ``` #include <QtNetwork> #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> // 定义一个函数,用于从云端获取下拉菜单列表内容 void getDropdownOptionsFromCloud(QString apiUrl, QComboBox* comboBox) { // 创建一个QNetworkAccessManager对象,用于发送HTTP请求 QNetworkAccessManager* manager = new QNetworkAccessManager(); // 发送HTTP GET请求到云端API QNetworkReply* reply = manager->get(QNetworkRequest(QUrl(apiUrl))); // 连接reply的finished信号,以在HTTP请求完成后处理返回的数据 QObject::connect(reply, &QNetworkReply::finished, [=]() { // 读取返回的JSON数据 QByteArray jsonData = reply->readAll(); // 解析JSON数据,提取下拉菜单选项内容 QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData); QJsonArray optionsArray = jsonDoc.array(); for (int i = 0; i < optionsArray.size(); ++i) { QJsonObject optionObj = optionsArray.at(i).toObject(); QString optionText = optionObj.value("text").toString(); comboBox->addItem(optionText); } // 释放manager和reply对象 manager->deleteLater(); reply->deleteLater(); }); } ``` 你可以将上述代码添加到你的QT项目中,并调用getDropdownOptionsFromCloud函数,传入API的URL和下拉菜单控件的指针,以从云端获取下拉菜单列表内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值