Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Astrologer от Декабрь 28, 2010, 16:04



Название: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: Astrologer от Декабрь 28, 2010, 16:04
Всех с наступающим!!
Собственно вопрос. Подскажите пожалуйста. Заранее благодарен.


Название: Re: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: GreatSnake от Декабрь 28, 2010, 16:18
см. QShortcut


Название: Re: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: GreatSnake от Декабрь 28, 2010, 16:39
Цитировать
Спасибо. Пишу из потомка QListWidget:
Ну дык коли из потомка, то кто мешает перегрузить QListWidget::keyPressEvent()?


Название: Re: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: Astrologer от Декабрь 28, 2010, 16:53
Спасибо. Разбираюсь потихоньку.

Код
C++ (Qt)
void QTreeCheckable::keyPressEvent(QKeyEvent* event)
{
   switch(event->key())
    {
   case (Qt::Key_Shift + Qt::Key_Up):
       swapUp();
       break;
 
   }
}
 

Не хочет компилиться.


Название: Re: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: Fat-Zer от Декабрь 28, 2010, 17:52
Код
C++ (Qt)
 if(event->modifiers()==Qt::ShiftModifier && event->key()==Qt::Key_Up)
   swapUp();
 
Как-то так...


Название: Re: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: Astrologer от Декабрь 29, 2010, 10:36
Не хочет компилиться из за того, что говорит что keyPressEvent не определен.
Код
C++ (Qt)
D:/my_projects/DBFProject/qtreecheckable.cpp:16: error: no 'void QTreeCheckable::keyPressEvent(QKeyEvent*)' member function declared in class 'QTreeCheckable'
 


Название: Re: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: Пантер от Декабрь 29, 2010, 10:45
Покажи как наследуешься и как определяешь keyPressEvent.


Название: Re: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: Astrologer от Декабрь 29, 2010, 11:28
Теперь работает. Просто в хедере не определил keyPressEvent(...). Вот так работает.
Код
C++ (Qt)
void QTreeCheckable::keyPressEvent(QKeyEvent* event)
{
   switch(event->key())
    {
    case (Qt::Key_Up):
       swapUp();
       break;
    case (Qt::Key_Down):
            swapDown();
            break;
   }
}
 

Хочу сделать теперь чтоб с зажатым Shift работало, пишу так, но не работает пока:
Код
C++ (Qt)
void QTreeCheckable::keyPressEvent(QKeyEvent* event)
{
   switch(event->key())
    {
    case (Qt::Key_Up && Qt::ShiftModifier):
       swapUp();
       break;
    case (Qt::Key_Down):
            swapDown();
            break;
   }
}
 


Название: Re: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: Пантер от Декабрь 29, 2010, 11:35
Код
C++ (Qt)
void QTreeCheckable::keyPressEvent(QKeyEvent* event)
{
   switch(event->key())
    {
    case (Qt::Key_Up):
       if (event->modifiers() & Qt::ShiftModifier) {
               swapUp();
       }
       break;
    case (Qt::Key_Down):
            swapDown();
            break;
   }
}
 


Название: Re: Как связать клик "Shift+<arrow-up>" в ListWidget'е c заданным слотом
Отправлено: Astrologer от Декабрь 29, 2010, 11:38
Работает!  :) Всем большое спасибо. С Наступающим Новым Годом!