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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отловить нажатие [x]?  (Прочитано 8268 раз)
ZIkos
Гость
« : Ноябрь 28, 2007, 15:38 »

Скажите пожалуйста как отловить нажатие
  • на QDockWidget.
Есть такой код
QDockWidget *pDistribPanel = m_pShell->CreatePanel("uid1", tr("Имя панели"));

Мне нужно перехвать событие закрытия окна, для того чтобы убить этот QDocWidget.
Записан
Lion
Гость
« Ответ #1 : Ноябрь 28, 2007, 15:48 »

QCloseEvent + eventFilter тебе в руки.
Записан
Dodge
Гость
« Ответ #2 : Ноябрь 28, 2007, 16:00 »

QCloseEvent + eventFilter тебе в руки.
Уточню, есть два варианта:
1. Если вы хотите отловить закрытие виджета написанного вами, то достаточно переопределить метод - closeEvent
2. Установить фильтр на события и отслеживать его закрытие.
Записан
ZIkos
Гость
« Ответ #3 : Ноябрь 28, 2007, 17:10 »

Не могли бы вы привести пример, как польоваться QCloseEvent  для произвольного виджета
Записан
fanat9
Гость
« Ответ #4 : Ноябрь 28, 2007, 17:12 »

\examples\desktop\systray\
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Ноябрь 28, 2007, 17:13 »

Не могли бы вы привести пример, как польоваться QCloseEvent  для произвольного виджета


В своем классе наследнике перегружаешь метод  closeEvent(QCloseEvent *event) и в немже выполняем нужные действия. Далее читаем в ассистанте про QCloseEvent

Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Dodge
Гость
« Ответ #6 : Ноябрь 28, 2007, 20:02 »

В своем классе наследнике перегружаешь метод  closeEvent(QCloseEvent *event) и в немже выполняем нужные действия. Далее читаем в ассистанте про QCloseEvent
Опять же уточню, во втором случае, в первую очередь нада смотреть не QCloseEvent, а эвент филтер(eventFilter).
Записан
Alex03
Гость
« Ответ #7 : Ноябрь 29, 2007, 07:46 »

Не могли бы вы привести пример, как польоваться QCloseEvent  для произвольного виджета


Код:
void СSomeWidget::closeEvent(QCloseEvent * e)
{
    if(CanCloseWidget(?))
    {
        ...
        QBaseWidget::closeEvent(e);
        ...
    }
    else
    {
        e->ignore();
    }
}
Записан
ZIkos
Гость
« Ответ #8 : Ноябрь 29, 2007, 11:59 »

Всем спасибо. Как отловить closeEvent у своего собственного класса, который является наследником от QWidget я понял.
Но как отловить его у экзепляра класса QDockWidget *pDock1 = new QDockWidget?
Записан
Barmaglodd
Гость
« Ответ #9 : Ноябрь 29, 2007, 12:02 »

QObject::installEventFilter в помощь.
Создаешь наследника от QObject, в нем перекрываешь eventFilter(тут ловишь QCloseEvent), и устанавливаешь его фильтром на pDock1.
Записан
ZIkos
Гость
« Ответ #10 : Ноябрь 29, 2007, 12:09 »

Большое спасибо. Был бы очень благодарен если бы вы привели пример кода.  Подмигивающий
Записан
Barmaglodd
Гость
« Ответ #11 : Ноябрь 29, 2007, 12:12 »

А в ассистанте не пробовали смотреть? Подмигивающий
Кусок оттуда Улыбающийся
Код:
//Сам фильтр

     class KeyPressEater : public QObject
     {
         Q_OBJECT
         ...

     protected:
         bool eventFilter(QObject *obj, QEvent *event);
     };

     bool KeyPressEater::eventFilter(QObject *obj, QEvent *event)
     {
         if (event->type() == QEvent::KeyPress) {
             QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
             qDebug("Ate key press %d", keyEvent->key());
             return true;
         } else {
             // standard event processing
             return QObject::eventFilter(obj, event);
         }
     }

//Устанавливаем

     KeyPressEater *keyPressEater = new KeyPressEater(this);
     QPushButton *pushButton = new QPushButton(this);
     QListView *listView = new QListView(this);

     pushButton->installEventFilter(keyPressEater);
     listView->installEventFilter(keyPressEater);

Записан
ZIkos
Гость
« Ответ #12 : Ноябрь 29, 2007, 12:16 »

Только что посмотрел. Спасибо. Крутой
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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