Clickable QLabel/ru
Jump to navigation
Jump to search
Иногда может потребоваться использовать сигнал "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'. Также можно посылать сигнал при отпускании кнопки мыши, но это уже на усмотрение разработчика.