2014-01-14 28 views
5

我想從QToolBar中的一個QToolButton切換到另一個。我已經使用QStackedWidget,它們太簡單了,從一個widget移動到另一個,但在這裏我無法通過使用keyReleaseEvent得到如何移動。在QT中切換一個QToolButton到另一個

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

好的,我將使用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

這個屬性保存這個小部件(或它的焦點代理)是否具有鍵盤輸入焦點。

默認情況下,此屬性爲false。

注意:獲取該控件的該屬性值實際上等同於檢查QAp​​plication :: focusWidget()是否引用該控件。

訪問功能: 布爾hasFocus()const的

+0

現在當按下一次Key_left或Key_Right時,它會自動移動兩次。如何控制它? – Rupesh

相關問題