Russian Qt Forum

Qt => Общие вопросы => Тема начата: Red Devil от Июль 06, 2008, 10:29



Название: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: Red Devil от Июль 06, 2008, 10:29
В MS VS, когда жмем ctrl+tab появляется очень удобная панель с выбором куда мы хотим переместится.
У меня собственно стала проблема с тем, каким образом реализовать аналогичное поведение.
А именно, панель появлятеся при нажатии ctrl+tab и до того момента пока мы не отпустим ctrl - она не исчезнет.
Как этой можно реализовать в Qt ? Интересует сам механизм того как отобразить ctrl+tab и держать панель именно до момента отпускания ctrl.


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: EhTemka от Июль 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)) {
// скрытие свитчера
}

}

как то так наверно можно...


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: Red Devil от Июль 08, 2008, 09:32
Спасибо за идею, приду домой опробую. Но кажется все действительно должно нормально работать, логика верная.


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: Red Devil от Июль 15, 2008, 18:03
Теперь я вот дошел до проблемы, как мне реализовать эти "типа кнопки", которые там находятся.
Прикладываю скриншот в аттач VS - где показано чего я хочу добится.

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

Хочу собственно узнать - может кто знает вариант лучше, который я не вижу ?
Или как вы думаете какой лучше класс взять за основы для этих "типа кнопок", Button или Label ?


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: EhTemka от Июль 15, 2008, 18:44
Почему бы не попробовать QListView или QListWidget? И кнопок ни каких не надо...

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

И тут делегат может помочь...


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: Red Devil от Июль 15, 2008, 20:26
Цитировать
Почему бы не попробовать QListView или QListWidget?
А можно ли его сделать так, чтобы его не были видно ?
То есть добится чтобы никто с виду не понял что это list view, как на скрине - там же ведь даже если он и есть, то его не видно, даже намека.
У меня терзают смутные сомнения, что я столкнусь с множеством проблем отрисовки, причем уже не самой кнопки - а виджета вообще.



Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: EhTemka от Июль 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 использовать :)


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: Red Devil от Июль 15, 2008, 22:47
Попробую, с list, все равно никуда не спешу. Интересно, что получится.


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: Red Devil от Июль 21, 2008, 10:57
Кстати, получилось ^_^. Не все сразу, с некоторыми проблемами, но мне их удалось решить.
Так во время реализации я понял, что у VS оно реализовано тоже с помощью списков. Понял это по поведению обьектов.

EhTemka, спасибо.


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: Пантер от Июль 21, 2008, 11:22
Ты хоть выложи решение где-нибудь, авось кому-нибудь понадобится. ;)


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: Alex03 от Июль 21, 2008, 11:48
Red Devil.
Надеюсь ты список переупорядочиваешь по факту переключения?
А то попадаются порой проги (редакторы) в которых на каждое одиночное нажатие Ctrl+Tab (с отпусканием кнопок между ними) переключение идёт на новый элемент (окно) подряд по всем, в то время как у "нормальных" прог происходит возврат к предыдущему, т.е. список строится по "давности использования". :)


Название: Re: Не могу понять как реализовать аналог Tab Switcher из VS
Отправлено: Red Devil от Июль 21, 2008, 15:39
Решение по на стадии тестового проекта, т.е. в убогом виде я вот его сейчас буду додумывать, какую структуру данных использовать для модели. Так что как сделаю более менее цивилизованный/готовый для повторого использования вариант выложу.

Я конечно буду как у нормальных редакторов буду делать, с историей ^_^