Clickable QLabel/ru

From Qt Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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'. Также можно посылать сигнал при отпускании кнопки мыши, но это уже на усмотрение разработчика.