1

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

参考

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

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

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

但它myToolButton仍然有 的图标myAction

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

4

2 回答 2

4

如果您查看 的来源QToolButton::setDefaultAction(QAction* action),它setIcon(action->icon())会根据您给它的操作设置图标。setIcon您可以在调用后使用所需的单独图标调用来手动覆盖该图标setDefaultAction

编辑:

这是一个您可以尝试的快速示例。也许您可以将其与您当前正在做的事情进行比较或发布您自己的示例?

主窗口.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")));
}

主窗口.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

主文件

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

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

  return a.exec();
}
于 2014-08-14T17:05:22.460 回答
0

当动作改变时,QToolButton 图标将重置为动作图标。

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

connect(toolButton, &QAction::changed, [=](){
   toolButton->setIcon(QIcon(QStringLiteral("new.jpg")));
});
于 2019-09-26T02:33:57.310 回答