QPushButton не мигает - PullRequest
       52

QPushButton не мигает

0 голосов
/ 19 сентября 2019

Вдохновлен Метка на QToolBar, возможно? Я пытаюсь его разработать.Но моя кнопка не мигает при нажатии, почему?

Я вижу, что в другом приложении цвет кнопки становится серым во время нажатия (при нажатии), а обычная кнопка становится синей.Но моя кнопка, которая является всего лишь изображением, не имеет никакого поведения во время щелчка.

enter image description here

С левой стороны находится панель инструментов, использующая 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 ]

0 голосов
/ 24 сентября 2019

На панели инструментов слева, которая использует QToolButton для отображения QAction s, будет применен специальный стиль QMacStyle, примененный к состоянию down / push.https://code.woboq.org/qt5/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm.html#3538 (точнее здесь , где он вызывает darkenPixmap())

Самое простое решение похоже на использование QToolButton или только QAction маршрута (действия болеев любом случае, гибче, чем кнопки, вы можете использовать их несколько раз в разных элементах пользовательского интерфейса).

В противном случае код, который вы разместили в ответе «Все еще стеснительно моргает», должен работать, если вы специально добавите файл в QIconдля режима Selected.Или просто используйте две иконки и поменяйте местами между ними (кажется, проще).

0 голосов
/ 20 сентября 2019

Тем не менее, застенчивый миг, не такой хороший, как в левом приложении.

enter image description here

button.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

button.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);
}
0 голосов
/ 21 сентября 2019

Вы должны проверить документы: https://doc.qt.io/qt-5/stylesheet-examples.html

Возможно, вам просто нужно установить таблицу стилей на нем.

QToolButton:pressed { }

Я делаю предположение здесь, но инструментВозможно, на панели уже есть таблица стилей, которая обрабатывает изменение цвета, которое вы наблюдаете.

0 голосов
/ 19 сентября 2019

сделать что-то вроде:

auto b = new QPushButton(this);
b->setText("hello");
connect(b, &QPushButton::clicked, [](){qDebug()<< "ok...";});
ui->statusBar->addWidget(b);
...