2014-01-14 16 views
5

Ich möchte von QToolButton zu einem anderen in QToolBar wechseln. Ich habe QStackedWidget verwendet, es ist zu einfach, von einem widget zu anderem zu bewegen, aber hier bin ich nicht in der Lage, zu erhalten, wie man sich bewegt, indem man keyReleaseEvent benutzt.Wechsel zwischen einem QToolButton zu einem anderen in 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

Ist das nicht einfacher ist es Schaltflächen der Werkzeugleiste hinzuzufügen, mit 'QToolBar :: addAction()'? – vahancho

+0

ok, ich werde hinzufügen Schaltflächen mit AddAction. Aber wie navigiere ich von einer Schaltfläche zur anderen? – Rupesh

+0

Zum Navigieren oder zum Auslösen einer bestimmten Schaltfläche können Sie jedem eine Verknüpfung mit der Funktion QAction :: setShortcut() 'zuweisen. – vahancho

Antwort

3

Sie müssen mit dem Fokus überprüfen, und je nach Bedarf verschieben. Ich würde etwas so schreiben:

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; 
    } 
} 

Beachten Sie, dass dieser Code mühsam gehen kann, wenn Sie weitere Schaltflächen hinzufügen. Ich würde sie in einen Behälter legen. Dann würde ich die Vorwärts- und Rückwärtsreihenfolge des Containers in Abhängigkeit von der Fokusschaltlogik durchlaufen.

finden Sie in der Dokumentation für weitere Details:

focus : const bool

Diese Eigenschaft enthält, ob das Widget (oder dessen Fokus Proxy), um die Tastatureingabefokus hat.

Standardmäßig ist diese Eigenschaft falsch.

Hinweis: Wenn Sie den Wert dieser Eigenschaft für ein Widget ermitteln, entspricht dies praktisch der Überprüfung, ob sich QApplication :: focusWidget() auf das Widget bezieht.

Access-Funktionen: Bool hasFocus() const

+0

Jetzt wird automatisch zweimal verschoben, wenn einmal Key_left oder Key_Right gedrückt wird. Wie man es kontrolliert? – Rupesh