2014-01-14 4 views
5

Я хочу переключиться с одного QToolButton на другой в QToolBar. Я использовал QStackedWidget, их слишком просто переместиться от одного widget к другому, но здесь я не могу получить, как двигаться с помощью keyReleaseEvent.Переключение между одним QToolButton другим в QT

mywindow::mywindow() : QMainWindow() 
{ 
    widget = new QWidget(); 
    setCentralWidget(widget); 

    tool = new QToolBar(); 
    vertical = new QVBoxLayout(); 
    button1 = new QToolButton(); 
    connect(button1, SIGNAL(clicked()), this, SLOT(fileNew())); 

    button2 = new QToolButton(); 
    button3 = new QToolButton(); 

    button1->setIcon(QIcon("download.jpg")); 
    button1->setGeometry(0,0,100,200); 
    button2->setIcon(QIcon("images.jpg")); 
    button3->setIcon(QIcon("settings-icon.jpg")); 

    //stack1->addWidget(button1); 
    //stack1->addWidget(button2); 
    //stack1->addWidget(button3); 

    tool->addWidget(button1); 
    tool->addWidget(button2); 
    tool->addWidget(button3); 
    //tool->addWidget(stack1); 

    vertical->addWidget(tool); 
    widget->setLayout(vertical); 
} 

void mywindow::keyReleaseEvent(KeyEvent *event) 
{ 
    switch(event->key()) 
    { 
     case:Qt::Key_Left: 


    } 
} 
+0

Не проще добавлять кнопки на панели инструментов с 'QToolBar :: AddAction()'? – vahancho

+0

ok Я добавлю кнопки, используя addAction. Но как перемещаться с одной кнопки на другую? – Rupesh

+0

Для навигации или запуска определенной кнопки вы можете назначить ярлык каждому из них с помощью функции 'QAction :: setShortcut()'. – vahancho

ответ

3

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

void mywindow::keyReleaseEvent(KeyEvent *event) 
{ 
    switch(event->key()) 
    { 
     case:Qt::Key_Left: 
      if (button3->hasFocus()) 
       button2->setFocus(); 
      else if (button2->hasFocus()) 
       button1->setFocus(); 
      break; 
     case:Qt::Key_Right: 
      if (button1->hasFocus()) 
       button2->setFocus(); 
      else if (button2->hasFocus()) 
       button3->setFocus(); 
      break; 
    } 
} 

Обратите внимание, что этот код может оказаться утомительным, если вы продолжаете добавлять дополнительные кнопки. Я бы поставил их в контейнер. Затем я буду проходить через этот контейнер в прямом и обратном порядке в зависимости от логики переключения фокуса.

Смотрите документацию для получения дополнительной информации:

focus : const bool

Это свойство имеет ли виджет (или его прокси фокуса) фокус ввода клавиатуры.

По умолчанию это свойство является ложным.

Примечание. Получение значения этого свойства для виджета фактически эквивалентно проверке того, относится ли QApplication :: focusWidget() к виджету.

Функции доступа: BOOL HasFocus() константные

+0

Теперь он автоматически переключается два раза при однократном нажатии Key_left или Key_Right. Как его контролировать? – Rupesh

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

  • Нет связанных вопросов^_^