qt 实现点击按钮出现下拉抽屉,抽屉里有几个带图标的按钮,再点击一次按钮收起抽屉
时间: 2023-06-07 08:02:30 浏览: 145
QT实现抽屉效果
5星 · 资源好评率100%
在Qt中实现点击按钮出现下拉抽屉可以通过QComboBox或者QToolButton配合QMenu来完成。
1. 基于QComboBox的方法:
首先定义一个QComboBox对象,将QComboBox设置为不可编辑、没有边框和滚动条,然后将QComboBox添加到界面中。接着,在界面的构造函数中为QComboBox设置一个下拉菜单,也就是抽屉里面的内容,可以使用QMenu和QAction来实现。最后,为QComboBox设置一个信号槽,使得当QComboBox下拉菜单被激活时显示菜单,当再次被激活时隐藏菜单,代码如下:
```
QComboBox *comboBox = new QComboBox(this);
comboBox->setEditable(false);
comboBox->setStyleSheet("QComboBox { border: none; } QComboBox QAbstractItemView { border: none; }");
comboBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
comboBox->addItem(QIcon(":/icon/icon1.png"), "");
comboBox->addItem(QIcon(":/icon/icon2.png"), "");
comboBox->addItem(QIcon(":/icon/icon3.png"), "");
QMenu *menu = new QMenu(this);
menu->addAction(QIcon(":/icon/icon1.png"), "Action 1");
menu->addAction(QIcon(":/icon/icon2.png"), "Action 2");
menu->addAction(QIcon(":/icon/icon3.png"), "Action 3");
comboBox->setMenu(menu);
connect(comboBox, SIGNAL(activated(int)), comboBox, SLOT(showPopup()));
```
2. 基于QToolButton的方法:
基于QToolButton的实现方式更加灵活,可以直接在QToolButton的clicked函数中添加相应的逻辑来完成下拉抽屉的功能。需要在点击按钮时判断抽屉的状态,如果是关闭状态则展开抽屉,如果是打开状态则关闭抽屉。抽屉的内容同样可以使用QMenu和QAction来实现,代码如下:
```
QToolButton *toolButton = new QToolButton(this);
toolButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
toolButton->setIcon(QIcon(":/icon/down_arrow.png"));
toolButton->setStyleSheet("QToolButton { border: none; }");
QMenu *menu = new QMenu(this);
menu->addAction(QIcon(":/icon/icon1.png"), "Action 1");
menu->addAction(QIcon(":/icon/icon2.png"), "Action 2");
menu->addAction(QIcon(":/icon/icon3.png"), "Action 3");
connect(toolButton, &QToolButton::clicked, [=]() {
if (menu->isVisible()) {
menu->hide();
toolButton->setIcon(QIcon(":/icon/down_arrow.png"));
} else {
menu->exec(toolButton->mapToGlobal(QPoint(0, toolButton->height())));
toolButton->setIcon(QIcon(":/icon/up_arrow.png"));
}
});
```
以上两种方式都可以实现在Qt中点击按钮出现下拉抽屉,并且抽屉中带有带图标的按钮,再次点击按钮可收起抽屉的功能。根据实际需求选择不同的实现方式即可。
阅读全文