2012-04-15 4 views
4

Мне было интересно, можно ли создать собственный ключ быстрого доступа к QTabWidget. Поэтому, если я помещаю амперсанд infront письма, это означает, что ALT + «буква» отобразит эту вкладку; однако, я хочу, чтобы CTRL + 'letter' отобразило эту вкладку (не ALT).Qt Designer Ярлык на другой вкладке

Есть ли простой способ сделать это в Qt Designer? Если нет, есть ли простой способ сделать это в коде? QTabWidget, похоже, не имеет прямых методов для установки ярлыков.

ответ

4

Я не знаю, как это сделать с помощью конструктора, не знакомого с этим. Вы могли бы сделать это с QShortcut довольно легко в коде.

Вот фиктивный виджет, чтобы проиллюстрировать это. Нажмите Ctrl + a/Ctrl + b для переключения между вкладками.

#include <QtGui> 

class W: public QWidget 
{ 
    Q_OBJECT 

    public: 
     W(QWidget *parent=0): QWidget(parent) 
     { 
     // Create a dummy tab widget thing 
     QTabWidget *tw = new QTabWidget(this); 
     QLabel *l1 = new QLabel("hello"); 
     QLabel *l2 = new QLabel("world"); 
     tw->addTab(l1, "one"); 
     tw->addTab(l2, "two"); 
     QHBoxLayout *l = new QHBoxLayout; 
     l->addWidget(tw); 
     setLayout(l); 

     // Setup a signal mapper to avoid creating custom slots for each tab 
     QSignalMapper *m = new QSignalMapper(this); 

     // Setup the shortcut for the first tab 
     QShortcut *s1 = new QShortcut(QKeySequence("Ctrl+a"), this); 
     connect(s1, SIGNAL(activated()), m, SLOT(map())); 
     m->setMapping(s1, 0); 

     // Setup the shortcut for the second tab 
     QShortcut *s2 = new QShortcut(QKeySequence("Ctrl+b"), this); 
     connect(s2, SIGNAL(activated()), m, SLOT(map())); 
     m->setMapping(s2, 1); 

     // Wire the signal mapper to the tab widget index change slot 
     connect(m, SIGNAL(mapped(int)), tw, SLOT(setCurrentIndex(int))); 
     } 
}; 

Это не означает, как пример компоновки виджетов лучших практик ... просто чтобы проиллюстрировать один из способов проволоки последовательность ярлыка на изменение вкладки.

Смежные вопросы