遇到的问题
在工具栏中添加一个目录按钮,要求:
- 能够修改默认的背景颜色、字体颜色,选中的背景颜色、字体颜色。
- 设置指定的图片和文字,且图片要在文字上方。
- 点击按钮后立即弹出目录子项列表。
解决方法
使用 QToolButton 并关联 QMenu
QPushButton 可以直接关联 QMenu ,但难以设置文字在图片下方,利用 QToolButton ,下行代码可以解决这个问题:
testButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); //设置文字在图片下方
但是 QTooButton 有一个公共属性 popupMode,默认是 QToolButton::DelayedPopup——延时显示,导致点击的时候不会立即弹出目录的子项目,需长按按钮才会显示。
qt官方文档
只要修改默认选项,将属性改为QToolButton::InstantPopup,就可以在点击按钮后立即弹出目录子项啦。
testButton->setPopupMode(QToolButton::InstantPopup); //设置点击后立即弹出目录
将 QMenu 类加入到 QToolButton 中,再将 QToolButton 加到工具栏。
QMenu 自带一个展开下拉的实心三角图标在右下角,文字后加两个空格,可以让小三角图标与文字拉开距离,更加美观。
完整代码参考如下:
QMenu *testMenu = new QMenu(this);
testMenu->setStyleSheet("QMenu::item{background-color:#FFFFFF;color:#000000;}"
"QMenu::item:selected{background-color:#000000; color:#FFFFFF;}");
QIcon icon;
icon.addPixmap(QPixmap(":/image.png"), QIcon::Normal, QIcon::off);
QToolButton* testButton = new QToolButton();
testButton->setStyleSheet("QToolButton{color:#FFFFFF;}");
testButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); //设置文字在图片下方
testButton->setPopupMode(QToolButton::InstantPopup); //设置点击后立即弹出目录
testButton->setIcon(icon);
testButton->setText("测试 "); //文字后两个空格
testButton->setMenu(testMenu);
this->addWidget(testButton);