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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qlabel и сигналы  (Прочитано 20189 раз)
pahom
Гость
« : Сентября 04, 2007, 08:07 »

Доброе время суток.
Кто подскажет ответ на интересующий меня вопрос? А именно: "надо окрашивать label в другой цвет, при наведение курсора мыши. какое это событие (сигнал)?"
В Ассаулте всего два сигнала void linkActivated ( const QString & link ) void linkHovered ( const QString & link )...

ос: linux (openSuSE 10.2) Qt4.2.1

C уважением, Михаил.
Записан
WW
Гость
« Ответ #1 : Сентября 04, 2007, 10:08 »

Цитировать
mouseTracking : bool
This property holds whether mouse tracking is enabled for the widget.
If mouse tracking is disabled (the default), the widget only receives mouse move events when at least one mouse button is pressed while the mouse is being moved.
If mouse tracking is enabled, the widget receives mouse move events even if no buttons are pressed.
Access functions:
bool hasMouseTracking () const
void setMouseTracking ( bool enable )
See also mouseMoveEvent().
Записан
QCasper
Гость
« Ответ #2 : Сентября 04, 2007, 13:32 »

Если задача лишь покрасить лэйбл при наведении, то возможно более лучшим выходом из положения будет применение CSS. Qt 4.2 вроде как уже умеет.
Записан
pahom
Гость
« Ответ #3 : Сентября 04, 2007, 13:40 »

и как сие заюзать? мне бы примерчик.
Записан
QCasper
Гость
« Ответ #4 : Сентября 04, 2007, 14:34 »

http://doc.trolltech.com/4.3/stylesheet.html
Записан
Sergeich
Гость
« Ответ #5 : Сентября 04, 2007, 16:11 »

QEvent::Enter - Mouse enters widget's boundaries.
QEvent::Leave - Mouse leaves widget's boundaries.
Записан
pahom
Гость
« Ответ #6 : Сентября 05, 2007, 05:07 »

Ребята, вы не поняли. Я немогу понять как связать стиль и лабел или к нему евент прикрутить. Пример можно? Или так и будете ссылки кидать с методами? Я ведь, прежде чем писать, это все смотрел.
Записан
QCasper
Гость
« Ответ #7 : Сентября 05, 2007, 08:47 »

Я не пойму задача в чем заключается?

1. Сделать чтобы лэйбл меня цвет при наведении мыши. Любым способом.
2. Во что бы то ни стало прикрутить обработку события наведения мыши. Неважно для каких целей.
3. Сделать и то и другое?

Какая из этих всех задач приоритетней. Если первая, то достаточно заюзать CSS как при оформлении HTML доков, что-то типа setStyle("QLabel:hovered {background:#FF3300}"). Подробнее см. ссылку.
Записан
Sergeich
Гость
« Ответ #8 : Сентября 05, 2007, 10:51 »

Код:
class Filter : public QObject
{
public:
  Filter( QObject* parent = 0 ) : QObject(parent) {}
  bool eventFilter( QObject* obj, QEvent* e );
};

bool Filter::eventFilter( QObject* obj, QEvent* e )
{
  if ( !obj->isWidgetType() ) return;
  QWidget* w = (QWidget*) obj;
  if ( e->type() == QEvent::Enter ) {
    w->setPaletteBackgroundColor( QColor(200, 210, 220) );
  }
  else if ( e->type() == QEvent::Leave ) {
    w->setPaletteBackgroundColor( QColor(200, 200, 200) );
  }
  return false;
}

QLabel* label = new QLabel( "Bla-bla-bla", 0 );
label->installEventFilter( new Filter(label) );
« Последнее редактирование: Сентября 05, 2007, 10:54 от Sergeich » Записан
pahom
Гость
« Ответ #9 : Сентября 05, 2007, 11:24 »

Код:
class Filter : public QObject
{
public:
  Filter( QObject* parent = 0 ) : QObject(parent) {}
  bool eventFilter( QObject* obj, QEvent* e );
};

bool Filter::eventFilter( QObject* obj, QEvent* e )
{
  if ( !obj->isWidgetType() ) return;
  QWidget* w = (QWidget*) obj;
  if ( e->type() == QEvent::Enter ) {
   w->setPaletteBackgroundColor( QColor(200, 210, 220) );//error
  }
  else if ( e->type() == QEvent::Leave ) {
    w->setPaletteBackgroundColor( QColor(200, 200, 200) );//error
  }
  return false;
}

QLabel* label = new QLabel( "Bla-bla-bla", 0 );
label->installEventFilter( new Filter(label) );
src/gsmbf2.cpp:40 error class 'QWidget' has no member named 'setPaletteBackgroundColor'
src/gsmbf2.cpp:43 error class 'QWidget' has no member named 'setPaletteBackgroundColor'
Записан
pahom
Гость
« Ответ #10 : Сентября 05, 2007, 11:28 »

Я не пойму задача в чем заключается?...
Все просто. когда указатель мыши попадает на label он окрашивается в синий, уходит - label становится черным. Мне сугубо все равно через что там это делается через CCS или еще как-то. Мне нужен пример. Я бы его разобрал, расковырял и было бы счастье. С уважением.
Записан
pahom
Гость
« Ответ #11 : Сентября 05, 2007, 12:15 »

Код:
class Filter : public QObject
{
public:
  Filter( QObject* parent = 0 ) : QObject(parent) {}
  bool eventFilter( QObject* obj, QEvent* e );
};

bool Filter::eventFilter( QObject* obj, QEvent* e )
{
  if ( !obj->isWidgetType() ) return;
  QWidget* w = (QWidget*) obj;
  if ( e->type() == QEvent::Enter ) {
//    w->setPaletteBackgroundColor( QColor(200, 210, 220) );
      QPalette palette;
      palette.setColor(w->backgroundRole(), QColor(200,210,220));
      w->setPalette(palette);
  }
  else if ( e->type() == QEvent::Leave ) {
//    w->setPaletteBackgroundColor( QColor(200, 200, 200) );
      QPalette palette;
      palette.setColor(w->backgroundRole(), QColor(200,200,200));
      w->setPalette(palette);
  }
  return false;
}

QLabel* label = new QLabel( "Bla-bla-bla", 0 );
label->installEventFilter( new Filter(label) );
заменил в коде строчки, как показано выше, компилится, однако, не работает.
« Последнее редактирование: Сентября 05, 2007, 12:35 от pahom » Записан
QCasper
Гость
« Ответ #12 : Сентября 05, 2007, 13:04 »

Я не пойму задача в чем заключается?...
Все просто. когда указатель мыши попадает на label он окрашивается в синий, уходит - label становится черным. Мне сугубо все равно через что там это делается через CCS или еще как-то. Мне нужен пример. Я бы его разобрал, расковырял и было бы счастье. С уважением.

Подстава... оказывается из всех виджетов именно QLabel не поддерживает :hover. Только щас узнал об этом Обеспокоенный Ну, на будущее, если вдруг с другими виджетами захочется провернуть что-нить подобное, то не надо перегружать никакие эвенты, а просто сделать w.setStyleSheet(":hover{background:red}"); где w - объект любого стандартного виджета кроме QLabel.
Записан
pahom
Гость
« Ответ #13 : Сентября 05, 2007, 13:25 »

Цитировать
Подстава...
Спасибо, дорогой, что вовремя меня остановил. Я уже все волосы на голове повыдергивал. Хотел было за ствол хватануться, что бы монитор прострелить Крутой) Будем придумывать что то другое.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #14 : Сентября 05, 2007, 13:29 »

Цитировать
заменил в коде строчки, как показано выше, компилится, однако, не работает.

Установи для QLabel setAutoFillBackground(true)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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