Russian Qt Forum
Ноябрь 24, 2024, 04:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как сделать так чтобы QLabel испускал сигнал pressed  (Прочитано 9435 раз)
zoro86
Гость
« : Февраль 17, 2010, 07:23 »

У меня на форме в качестве кнопок используется QLabel чтобы динамически подгружать картинки... так вот как реализовать свой виджет с поддержкой метода setText("<img src=\"pool.jpg\"/>") чтобы мог испускать сигналы нажатия кнопки мыши, итд...??
Записан
BRE
Гость
« Ответ #1 : Февраль 17, 2010, 08:16 »

Унаследоваться от QLabel, переопределить обработчик события нажатия кнопки мыши (mousePressEvent) и испускать оттуда сигнал (emit pressed).

А по хорошему, нужно не стесняться пользоваться поиском по форуму. Вот нашел тему-клон в том же разделе: сигнал нажатия на label (http://www.prog.org.ru/topic_9318_0.htm)
« Последнее редактирование: Февраль 17, 2010, 08:35 от BRE » Записан
zoro86
Гость
« Ответ #2 : Февраль 17, 2010, 09:10 »

спасибо BRE ... учту в следующий раз...
Записан
zoro86
Гость
« Ответ #3 : Февраль 17, 2010, 09:39 »

сделал следующее...
создал файл label.h:

Код:
#ifndef _LABEL_H_
#define _LABEL_H_

#include <QtGui/QMouseEvent>
#include <QtGui/QLabel>

class QExLabel : public QLabel
{
Q_OBJECT
public:
QExLabel(QWidget *parent = 0);
signals:
void clicked();
protected:
void mouseReleaseEvent(QMouseEvent *e);

};
#endif // !_LABEL_H_

создал файл label.cpp:

#include "label.h"
Код:
QExLabel::QExLabel(QWidget *paren) : QLabel(parent)
{
}
void QExLabel::mouseReleaseEvent(QMouseEvent *e)
{

if(e->button() == Qt::LeftButton)
{
emit clicked();
}

}

теперь подключаю его в программу
и определяю:
btnInformation = new QExLabel(step1Widget);
connect(btnInformation, SIGNAL(clicked()), SLOT(quit()));

при компиляции выдает:

Код:
mainwindow.o: In function `MainWindow::slotBtnMainCreate()':
mainwindow.cpp:(.text+0xb1): undefined reference to `QExLabel::QExLabel(QWidget*)'
moc_label.o:(.rodata._ZTV8QExLabel[vtable for QExLabel]+0x54): undefined reference to `QExLabel::mouseReleaseEvent(QMouseEvent*)'
collect2: ld returned 1 exit status
make: *** [tank] Ошибка 1

я что та не так сделал...??
Записан
Akaiten
Гость
« Ответ #4 : Февраль 17, 2010, 09:53 »

Возможно забыли добавить label.cpp в проект?
Записан
zoro86
Гость
« Ответ #5 : Февраль 17, 2010, 10:54 »

точно... а еще забыл букву в t в слове parent
Записан
shirushizo
Гость
« Ответ #6 : Февраль 18, 2010, 12:15 »

А не проще ли пользоваться QPushButton::setIcon(QIcon)? Динамически можно менять картинку, если надо QPushButton::setFlat(true), чтобы кнопка была плоской.
Записан
nn1317
Гость
« Ответ #7 : Февраль 25, 2010, 22:32 »

вообще QPushButton & setStyleSheet рулят. долго руки не доходили до qss, а как то писал крупный проект с полностью рисованным интерфейсом - быстро привык, теперь часто юзаю)
Записан
zoro86
Гость
« Ответ #8 : Февраль 26, 2010, 08:12 »

Дело в том что я не спорю, это на самом деле хороше.
Код:
inputCod->setStyleSheet("background-repeat:no-repeat;\n"
    "font-size: 42px;\n"
    "color: #ff2d03;\n"
    "font-weight: bold;\n"
    "font-family: Arial, Tahoma, Helvetica, sans-serif;\n"
    "border-radius: 10px;\n"
    "background-image: url(:/images/input_cod_bg.png);");
проста когда дело доходит до вставки картинок которых нет в .qrc файле тогда на помощь приходит setText которой у QPushButton... не распознает html. вот и пришлось QLabel под себя компилить..
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 20.