在工具栏 QToolBar 中添加目录 QMenu——使用QToolButton

遇到的问题

在工具栏中添加一个目录按钮,要求:

  1. 能够修改默认的背景颜色、字体颜色,选中的背景颜色、字体颜色。
  2. 设置指定的图片和文字,且图片要在文字上方
  3. 点击按钮后立即弹出目录子项列表。

解决方法

使用 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);
	

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您可以使用QToolBarQToolButton类来实现在菜单栏下用QToolBar建立四个横向排列的QToolButton。下面是一个简单的示例代码: ```c++ #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow window; window.setWindowTitle("My App"); // 添加菜单栏 QMenuBar *menuBar = new QMenuBar(&window); window.setMenuBar(menuBar); QMenu *fileMenu = new QMenu("&File", &window); menuBar->addMenu(fileMenu); QAction *newAction = new QAction("&New", &window); fileMenu->addAction(newAction); QAction *openAction = new QAction("&Open", &window); fileMenu->addAction(openAction); // 添加工具栏 QToolBar *toolBar = new QToolBar(&window); window.addToolBar(toolBar); // 添加四个QToolButton QToolButton *button1 = new QToolButton(&window); button1->setText("Button 1"); toolBar->addWidget(button1); QToolButton *button2 = new QToolButton(&window); button2->setText("Button 2"); toolBar->addWidget(button2); QToolButton *button3 = new QToolButton(&window); button3->setText("Button 3"); toolBar->addWidget(button3); QToolButton *button4 = new QToolButton(&window); button4->setText("Button 4"); toolBar->addWidget(button4); window.show(); return app.exec(); } ``` 在这个例子,我们首先创建了一个QMainWindow对象,并添加了菜单栏。然后,我们创建了一个QToolBar对象,并将其添加到窗口。接下来,我们创建了四个QToolButton对象,并将它们添加工具栏。最后,我们设置每个按钮的文本。 当您运行这个应用程序时,您会看到一个具有菜单栏和工具栏的窗口,工具栏下方有四个横向排列的按钮。您可以单击这些按钮来执行操作,或者从菜单栏选择相同的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值