Clickable QLabel/ru

From Qt Wiki
Jump to: navigation, search

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

Иногда может потребоваться использовать сигнал "clicked" от виджета QLabel, когда пользователь щелкает мышью на виджете, но у этого виджета отсутствует данный сигнал. В качестве заменителя можно использовать виджет QPushButton установив свойство 'flat', но тогда не будут доступны другие свойства QLabel. Далее прилагается код подкласса QLabel, который имеет сигнал "clicked".

Заголовочный файл

class ClickableLabel : public QLabel
{
Q_OBJECT
public:
    explicit ClickableLabel( const QString& text="", QWidget* parent=0 );
    ~ClickableLabel();
signals:
    void clicked();
protected:
    void mousePressEvent(QMouseEvent* event);
};

Исходный файл

ClickableLabel::ClickableLabel(const QString& text, QWidget* parent)
    : QLabel(parent)
{
    setText(text);
}

ClickableLabel::~ClickableLabel()
{
}

void ClickableLabel::mousePressEvent(QMouseEvent* event)
{
    emit clicked();
}

Пояснение: Обрабатывается событие при нажатии кнопки мыши на виджет, затем посылается сигнал 'clicked'. Также можно посылать сигнал при отпускании кнопки мыши, но это уже на усмотрение разработчика.