2014-01-14 30 views
5

QToolButtonからQToolBarに別のQToolButtonに切り替える必要があります。私はQStackedWidgetを使用しました、彼らはwidgetから他へ移動するにはあまりにも簡単ですが、ここで私はkeyReleaseEventを使用して移動する方法を得ることができません。QToolButton間で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

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

このプロパティには、このウィジェット(またはその焦点プロキシが)キーボード入力フォーカスがあるかどうかを保持しています。

デフォルトでは、このプロパティはfalseです。

注:ウィジェットのこのプロパティの値を取得することは、QApplication :: focusWidget()がウィジェットを参照するかどうかをチェックすることと事実上同じです。

アクセス機能: ブールhasFocus()constは

+0

これで、Key_leftまたはKey_Rightを1回押すと自動的に2回シフトします。どのようにそれを制御する? – Rupesh

関連する問題