1

その中にQToolButtonいくつかQActionの s があります。 問題は、このツールバー ボタンのアイコンを設定したことです。ポップアップ メニューから いくつかのアイコンを選択すると (設定項目が selected のテキストに変更されます)
、アイコンを変更したくありません。必要なものを取得するためのqt-wayはありますか? ヘッダファイルQActionQAction


#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);
4

2 に答える 2

2

そのため、ここQToolButtonでソースコードを少し掘り下げましたが、クラスがアクション信号をリッスンし、それに応じてボタンのデフォルトアクションを更新するという意味で、この動作はハードコーディングされているようです ( QToolButton::setDefaultAction )QToolButtontriggered

おそらく同じ信号に接続して、QToolButton アイコンを自由にリセットできます。

ところで、これは、アクションがチェック可能で QToolButton 内にラップされていることを考えると、かなり賢明な動作に見えます。

于 2015-05-29T10:19:28.417 に答える
1

はい、アレディアフェリアが示唆するように、最初に QToolButton アイコンを保存してから再度リセットすることができます。

 QObject::connect(this, &QToolButton::triggered, [this](QAction *triggeredAction) {
        QIcon icon = this->icon();
        this->setDefaultAction(triggeredAction);
        this->setIcon(icon);
 });

PS: 私のコードを使用する場合は、PRO ファイルで CONFIG += c++11 を追加してラムダ式の c++11 サポートを有効にすることを忘れないでください。

于 2015-05-29T20:03:03.327 に答える