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