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



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

参考:

如果一个工具按钮有一个默认的动作,这个动作定义了按钮的动作文本、图标、工具提示等属性

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

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

myToolButton仍有myAction的图标

是否有一种方法来保持默认的动作,但覆盖它的图标,仅为QToolButton,而不是为动作本身?换句话说:QToolButtons如何拥有与其默认操作不同的属性?

如果您查看QToolButton::setDefaultAction(QAction* action)的源代码,它使用setIcon(action->icon())从您给它的操作设置图标。你可以在调用setDefaultAction之后用你想要的单独的图标调用setIcon来手动覆盖那个图标。

编辑:

这里有一个快速的例子,你可以尝试一下。也许你可以将它与你目前正在做的事情进行比较,或者发布一个你自己的例子?

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();
}

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

我们需要像这样重写代码;

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

相关内容

  • 没有找到相关文章

最新更新