Исправить значок QToolButton
Я имею QToolButton
с парой QAction
внутри.
Проблема в том, что я установил значок для этой кнопки панели инструментов, и я не хочу, чтобы она менялась, когда я выбираю некоторые QAction
(меняет заданный элемент на текст из выбранного QAction
) из всплывающего меню.
Есть ли QT-способ получить то, что мне нужно?
заголовочный файл
#include <QToolButton>
class FieldButton : public QToolButton
{
Q_OBJECT
public:
explicit FieldButton(QWidget *parent = 0);
};
файл cpp
#include "fieldbutton.h"
FieldButton::FieldButton(QWidget *parent) :
QToolButton(parent)
{
setPopupMode(QToolButton::MenuButtonPopup);
QObject::connect(this, SIGNAL(triggered(QAction*)),
this, SLOT(setDefaultAction(QAction*)));
}
Вот как я это использую:
FieldButton *fieldButton = new FieldButton();
QMenu *allFields = new QMenu();
// ... filling QMenu with all needed fields of QAction type like:
QAction *field = new QAction(tr("%1").arg(*h),0);
field->setCheckable(true);
allFields->addAction(field);
// ...
fieldButton->setMenu(allFields);
fieldButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
fieldButton->setIcon(QIcon(":/field.png"));
fieldButton->setText("My text");
fieldButton->setCheckable(true);
toolbar->addWidget(fieldButton);
2 ответа
Итак, я немного покопался в QToolButton
Исходный код здесь, и похоже, что это поведение жестко закодировано в том смысле, что QToolButton
класс прислушивается к действию triggered
сигнализирует и обновляет действие кнопки по умолчанию соответственно ( QToolButton:: setDefaultAction)
Возможно, вы сможете подключиться к тому же сигналу и сбросить значок QToolButton по своему желанию.
Кстати, это выглядит довольно разумным поведением, учитывая, что ваши действия проверяемы и заключены в QToolButton.
Да, это возможно, как подсказывает alediaferia, вы можете сначала сохранить значок QToolButton и сбросить его снова:
QObject::connect(this, &QToolButton::triggered, [this](QAction *triggeredAction) {
QIcon icon = this->icon();
this->setDefaultAction(triggeredAction);
this->setIcon(icon);
});
PS: если вы хотите использовать мой код, не забудьте включить поддержку C++11 для лямбда-выражений в вашем pro-файле, добавив CONFIG += C++11