QToolButton应该有另一个图标而不是默认操作

时间:2014-08-14 12:28:16

标签: qt qtoolbar qaction

使用QToolButton和setDefaultAction(myAction)方法时,它将获取默认操作属性

Reference

  

如果工具按钮具有默认操作,则操作将定义按钮   文本,图标,工具提示等属性

所以我尝试覆盖图标,在QToolButton上调用setIcon。

myAction.setIcon(...);
myToolButton->setDefaultAction(myAction);
myToolButton->setIcon(...);

但它myToolButton仍然有myAction的图标。

有没有办法保留默认操作但覆盖它的图标,仅用于QToolButton,而不是用于操作本身?换句话说:QToolButtons如何具有与其默认操作不同的属性?

2 个答案:

答案 0 :(得分:3)

如果您查看QToolButton::setDefaultAction(QAction* action)的来源,则会使用setIcon(action->icon())从您提供的操作中设置图标。在致电setIcon后,您可以使用所需的单独图标致电setDefaultAction来手动覆盖该图标。

编辑:

以下是您可以尝试的简单示例。也许您可以将它与您当前正在做的事情进行比较或发布您自己的示例?

<强> MainWindow.cpp

#include "MainWindow.hpp"
#include <QAction>
#include <QToolButton>

MainWindow::MainWindow(QWidget* parent) :
  QMainWindow(parent) {
  QAction* action = new QAction(QIcon(QStringLiteral("original.jpg")), QStringLiteral("Test Action"), this);
  QToolButton* toolButton = new QToolButton(this);
  toolButton->setDefaultAction(action);
  toolButton->setIcon(QIcon(QStringLiteral("new.jpg")));
}

<强> MainWindow.hpp

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>

class MainWindow : public QMainWindow {
  Q_OBJECT

 public:
  explicit MainWindow(QWidget* parent = nullptr);
};

#endif // MAINWINDOW_H

<强>的main.cpp

#include "MainWindow.hpp"
#include <QApplication>

int main(int argc, char* argv[]) {
  QApplication a(argc, argv);
  MainWindow w;
  w.show();

  return a.exec();
}

答案 1 :(得分:0)

更改操作后,QToolButton图标将重置为操作图标。

我们需要像这样重新覆盖代码;

connect(toolButton, &QAction::changed, [=](){
   toolButton->setIcon(QIcon(QStringLiteral("new.jpg")));
});