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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу понять как реализовать аналог Tab Switcher из VS  (Прочитано 6587 раз)
Red Devil
Гость
« : Июль 06, 2008, 10:29 »

В MS VS, когда жмем ctrl+tab появляется очень удобная панель с выбором куда мы хотим переместится.
У меня собственно стала проблема с тем, каким образом реализовать аналогичное поведение.
А именно, панель появлятеся при нажатии ctrl+tab и до того момента пока мы не отпустим ctrl - она не исчезнет.
Как этой можно реализовать в Qt ? Интересует сам механизм того как отобразить ctrl+tab и держать панель именно до момента отпускания ctrl.
Записан
EhTemka
Гость
« Ответ #1 : Июль 07, 2008, 16:19 »

Можно как нить так попробовать:

Сначала в главном окне(или гле там у тебя табы) отслеживаешь QApplication::keyboardModifiers(), если есть кнтрл + таб

Код:
void MainWindow::keyPressEvent(QKeyEvent*event)
{
if (QApplication::keyboardModifiers() & Qt::ControlModifier && event->key() == Qt::Key_Tab) {
// показ свитчера...
}

}

А потом уже в  свитчере отслеживаешь QApplication::keyboardModifiers(), на отжатие кнтрл

Код:
void TabSwitcher::keyPressEvent(QKeyEvent*event)
{
if (!(QApplication::keyboardModifiers() & Qt::ControlModifier)) {
// скрытие свитчера
}

}

как то так наверно можно...
Записан
Red Devil
Гость
« Ответ #2 : Июль 08, 2008, 09:32 »

Спасибо за идею, приду домой опробую. Но кажется все действительно должно нормально работать, логика верная.
Записан
Red Devil
Гость
« Ответ #3 : Июль 15, 2008, 18:03 »

Теперь я вот дошел до проблемы, как мне реализовать эти "типа кнопки", которые там находятся.
Прикладываю скриншот в аттач VS - где показано чего я хочу добится.

Для реализации задачи, я думаю использовать QGridLayout.
У меня будут по крайне мере 2 столбца - Active Tool Windows и Active Files, причем если файлов много - то будут появляется и 3 и 4-ые столбцы, только уже без этого label. И думаю сделать специальный виджет у которого переопределить операцию рисования, чтобы его подсвечивать - типа активный. Так же нужно как-то сделать будет переход по нажатию стрелок, влево, вправо, вниз, вверх. Думаю нужно переопределять keyPressEvent и там на нужный обьект переустанавливать фокус.

Хочу собственно узнать - может кто знает вариант лучше, который я не вижу ?
Или как вы думаете какой лучше класс взять за основы для этих "типа кнопок", Button или Label ?
« Последнее редактирование: Июль 15, 2008, 18:04 от Red Devil » Записан
EhTemka
Гость
« Ответ #4 : Июль 15, 2008, 18:44 »

Почему бы не попробовать QListView или QListWidget? И кнопок ни каких не надо...

Цитировать
И думаю сделать специальный виджет у которого переопределить операцию рисования

И тут делегат может помочь...
« Последнее редактирование: Июль 15, 2008, 18:46 от EhTemka » Записан
Red Devil
Гость
« Ответ #5 : Июль 15, 2008, 20:26 »

Цитировать
Почему бы не попробовать QListView или QListWidget?
А можно ли его сделать так, чтобы его не были видно ?
То есть добится чтобы никто с виду не понял что это list view, как на скрине - там же ведь даже если он и есть, то его не видно, даже намека.
У меня терзают смутные сомнения, что я столкнусь с множеством проблем отрисовки, причем уже не самой кнопки - а виджета вообще.

Записан
EhTemka
Гость
« Ответ #6 : Июль 15, 2008, 21:17 »

Цитировать
А можно ли его сделать так, чтобы его не были видно ?
То есть добится чтобы никто с виду не понял что это list view, как на скрине - там же ведь даже если он и есть, то его не видно, даже намека.

да конечно

Код:
        QListView listView;
        listView.setFrameShape(QFrame::NoFrame);
QPalette pal = listView.palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
listView.setPalette(pal);

палитру можно как хошь настроить..

Цитировать
У меня терзают смутные сомнения, что я столкнусь с множеством проблем отрисовки, причем уже не самой кнопки - а виджета вообще.

Это да, если не будешь QListView или QListWidget использовать Улыбающийся
« Последнее редактирование: Июль 15, 2008, 21:21 от EhTemka » Записан
Red Devil
Гость
« Ответ #7 : Июль 15, 2008, 22:47 »

Попробую, с list, все равно никуда не спешу. Интересно, что получится.
Записан
Red Devil
Гость
« Ответ #8 : Июль 21, 2008, 10:57 »

Кстати, получилось ^_^. Не все сразу, с некоторыми проблемами, но мне их удалось решить.
Так во время реализации я понял, что у VS оно реализовано тоже с помощью списков. Понял это по поведению обьектов.

EhTemka, спасибо.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Июль 21, 2008, 11:22 »

Ты хоть выложи решение где-нибудь, авось кому-нибудь понадобится. Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Alex03
Гость
« Ответ #10 : Июль 21, 2008, 11:48 »

Red Devil.
Надеюсь ты список переупорядочиваешь по факту переключения?
А то попадаются порой проги (редакторы) в которых на каждое одиночное нажатие Ctrl+Tab (с отпусканием кнопок между ними) переключение идёт на новый элемент (окно) подряд по всем, в то время как у "нормальных" прог происходит возврат к предыдущему, т.е. список строится по "давности использования". Улыбающийся
Записан
Red Devil
Гость
« Ответ #11 : Июль 21, 2008, 15:39 »

Решение по на стадии тестового проекта, т.е. в убогом виде я вот его сейчас буду додумывать, какую структуру данных использовать для модели. Так что как сделаю более менее цивилизованный/готовый для повторого использования вариант выложу.

Я конечно буду как у нормальных редакторов буду делать, с историей ^_^
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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