//创建button
QPushbutton * button = new QPushbutton;
//连接button点击信号,在点击的时候弹出menu
connect(button,SIGNAL(clicked(bool)),this,SLOT(onButtonClicked(bool)));
//onButtonClicked函数实现。(menu的追加也可以在函数外,在函数外需要追加为全局变量)
void onButtonClicked(bool tt) {
//新建menu
QMenu *menu = new QMenu(this);
//新建action
QAction* act1 = new QAction("选择全局类型",this);
QAction* act2 = new QAction("选择工程类型",this);
QAction* act3 = new QAction("新建工程类型",this);
QAction* act4 = new QAction("移除类型",this);
//把action追加到menu
menu->addAction(act1);
menu->addAction(act1);
menu->addAction(act1);
menu->addAction(act1);
//把menu加载到button
button->setMenu(menu);
//设置button文字
button->setText("下拉列表");
//打开menu
menu->exec(QPoint(QCursor::pos().x(),QCursor::pos().y()));
}
效果:
进阶:
1、如果点击列表的某项需要做事情,可以追加响应的信号连接来响应事件
connect(act1,SIGNAL(triggered()),this,SLOT(onAct1Clicked()));
void onAct1Clicked() {
//在这里做自己想要的事情。
}
2、如果不喜欢那个按钮右侧的下拉图标,可以设置取消显示:
button->setStyleSheet("QPushButton::menu-indicator{image:none}");
效果如图:
3、如果不想显示文字,只显示下拉图标(或者其他图标),可以设置如下:
内置图标参考:(20条消息) Qt的内置图标库_爱上876的博客-CSDN博客_qt图标库
//设置QT内置图标-(下拉图标)
button->setIcon(QApplication::style()->standardICon(QStyle::SP_TitleBarUnshadeButton);
//一般这样设置图标比较小,如果要放大可以如下设置
QIcon icon = QApplication::style()->standardICon(QStyle::SP_TitleBarUnshadeButton);
QPixmap map = icon.pixmap(QSize(20,20));
button->setIcon(QIcon(map.scaled(QSize(100,100))));
//使用其他图片可以如下设置
button->setIcon(QIcon(QPixmap("./按钮/sound.png").scaled(QSize(100,100))));
使用QT自大内置图标效果图:
4、如果列表左边要放icon,就直接设置就可以,不要icon觉得左边太宽,可以如下设置
在上面的函数中追加如下
void onButtonClicked(bool tt) {
//新建menu
QMenu *menu = new QMenu(this);
//追加
QString menu_style = “QMenu::item{padding-left:2px};”;
menu->setStyleSheet(menu_style);
...
}
效果如下:(是不是顺眼多了)
喜欢就点个赞吧!