-1

QToolBar 上的 Label 启发,可能吗?我正在努力开发它。但是我的按钮在点击时不闪烁,为什么?

我在另一个应用程序中看到,在单击(按下时)按钮颜色看起来像灰色,而普通按钮变成蓝色。但是我的按钮只是一个图像,在点击过程中没有任何行为。

在此处输入图像描述

左侧是使用QAction(上面链接的问题)的工具栏,右侧是下面的代码。

QApplication a(argc, argv);
QMainWindow w;

QToolBar barA;
barA.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

QWidget widget;
QVBoxLayout vLayout(&widget);

QHBoxLayout hLayout;
vLayout.addLayout(&hLayout);

QPixmap pixmap("../../../on.png");
QIcon ButtonIcon(pixmap);

QPushButton bt;
bt.setIcon(ButtonIcon);
bt.setIconSize(QSize(32,32));
bt.setFixedSize(QSize(32,32));
bt.show();
hLayout.addWidget(&bt);

barA.addWidget(&widget);

QPushButton bt2("clickc");
barA.addWidget(&bt2);

w.addToolBar(&barA);

w.show();
return a.exec();
4

4 回答 4

0

QToolButton用于显示s的左侧工具栏将具有应用于向下/按下状态的 QAction特殊样式。https://code.woboq.org/qt5/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm.html#3538 (更具体地说在这里它调用)QMacStyledarkenPixmap()

最简单的解决方案似乎是使用路由QToolButton或仅使用QAction路由(无论如何,操作比按钮更灵活,您可以在不同的 UI 元素中多次使用它们)。

QIcon否则,如果您专门将文件添加到该Selected模式,则您在“仍然害羞眨眼”答案中发布的代码应该可以工作。或者只使用两个图标并在它们之间交换(似乎更容易)。

于 2019-09-24T04:08:49.043 回答
0

不过还是害羞地眨了眨眼,不如左侧应用程序中的那个好。

在此处输入图像描述

按钮.h

#include <QPushButton>

class Button : public QPushButton {
    Q_OBJECT
    QPixmap m_pixmap;
public:
    explicit Button(QString img, QWidget *parent = nullptr);
public slots:
    void enable();
    void disable();
};

#endif // BUTTON_H

按钮.cpp

#include "button.h"

Button::Button(QString img, QWidget *parent) : QPushButton(parent) {
    setIcon(QIcon(img));
    setIconSize(QSize(32,32));
    setFixedSize(QSize(32,32));

    connect(this, &QPushButton::pressed, this, &Button::disable);
    connect(this, &QPushButton::released, this, &Button::enable);
}

void Button::enable(){
    setIcon(m_pixmap);
}

void Button::disable(){
    m_pixmap = icon().pixmap(32,32,QIcon::Normal);
    QPixmap pixmap = icon().pixmap(32,32,QIcon::Selected);
    setIcon(pixmap);
}
于 2019-09-19T23:26:08.813 回答
0

您应该查看文档: https ://doc.qt.io/qt-5/stylesheet-examples.html

您可能只需要在其上设置样式表。

QToolButton:pressed { }

我在这里做一个假设,但工具栏可能已经有一个样式表来处理您正在观察的颜色变化。

于 2019-09-21T02:04:09.433 回答
0

做类似的事情:

auto b = new QPushButton(this);
b->setText("hello");
connect(b, &QPushButton::clicked, [](){qDebug()<< "ok...";});
ui->statusBar->addWidget(b);
于 2019-09-19T14:46:12.173 回答