crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QComboBox, Сигналы
whyt
  опции профиля:
сообщение 6.4.2009, 1:27
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 29.3.2009
Пользователь №: 649

Спасибо сказали: 1 раз(а)




Репутация:   1  


может туплю я..ночь уже..но вот возник вопрос, как сделать так, чтобы при клике на QComboBox - сразу после открытия выпадающего списка (но не после выбора какого нить итема) - происходило сигнал передавался в нужный мне слот..стандартные сигналы такого не позволяют..похожих тем в поиске не нашел.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 6.4.2009, 1:39
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Как вариант.
Смотри void QComboBox::showPopup () [virtual]
Наследуешся, переопределяешь этот метод, и высылаешь в нем свой сигнал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.4.2009, 7:54
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


можно еще попробовать установить фильтр событий и ловить событие "щелчёк" по QComboBox'у
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
whyt
  опции профиля:
сообщение 6.4.2009, 10:43
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 29.3.2009
Пользователь №: 649

Спасибо сказали: 1 раз(а)




Репутация:   1  


так, а поподробней можно? не встречал такого пока=( или ткните носом, где кого читать)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 6.4.2009, 11:15
Сообщение #5


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Чего не встречали - наследования или фильтров событий :rolleyes:
Если фильтры, то смотрите void QObject::installEventFilter ( QObject * filterObj )
Будет примерно так:
Раскрывающийся текст
         bool QMainForm::eventFilter(QObject *obj, QEvent *event)
         {
             if (event->type() == QEvent::MouseButtonPress && obj == comboBox) {
                 QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
                 // ваши действия и имитация сигнала
                 return true;
             } else {
                 return QObject::eventFilter(obj, event);
             }
         }

Если то что я предлогал. То необходимо наследоваться от QComboBox, и переопределять метод showPopup (). В этом случае придется создовать свою модель popup. Впринципе это не сложно. Читайте, эксперементируейте. Что непонятно пишите, разберемся :rolleyes:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
whyt
  опции профиля:
сообщение 6.4.2009, 11:51
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 29.3.2009
Пользователь №: 649

Спасибо сказали: 1 раз(а)




Репутация:   1  


спасибо за конкретные советы=) пробуем=)

вот на это
bool fakt::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::MouseButtonPress && obj == m_ui->cmb_list) {
                 QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
                 m_ui->rb_time->setEnabled(true);
                 return true;
             } else {
                 return QObject::eventFilter(obj, event);
             }


ругается вот так
 error: invalid static_cast from type `QEvent*' to type `QMouseEvent*'
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 6.4.2009, 11:59
Сообщение #7


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


А #include <QMouseEvent> добавили?
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event) вам возможно и не нужен. Из него можно определить только какая кнопка мыши нажата, и в кокой точке. Если эта информация не нужна, то можно эту строку убрать.

Сообщение отредактировал igor_bogomolov - 6.4.2009, 12:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 6.4.2009, 12:03
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(whyt @ 6.4.2009, 12:51) *
ругается вот так

вообще если говорить об ошибке.
то если не ошибаюсь static_cast в этом случае неуместен.
может dynamic_cast и не вызвал бы ругательст только на ноль проверить надо не забыть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
whyt
  опции профиля:
сообщение 6.4.2009, 12:04
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 29.3.2009
Пользователь №: 649

Спасибо сказали: 1 раз(а)




Репутация:   1  


нашел свой косяк - откомпилил..работает..только вот чтоб раскрыть список теперь придеца юзеру дважды кликать..неудобно, видимо придется использовать второй предложенный вариант
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 6.4.2009, 12:06
Сообщение #10


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата
только вот чтоб раскрыть список теперь придеца юзеру дважды кликать

return true замените на return false и посмотрите что получится?

Сообщение отредактировал igor_bogomolov - 6.4.2009, 12:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.12.2024, 12:54