在QT中在一个QToolButton之间切换

Rup*_*esh 5 c++ qt qtgui qtoolbar qmainwindow

我希望从一个切换QToolButton到另一个QToolBar.我已经习惯了QStackedWidget,它们从一个移动widget到另一个太简单了,但在这里我无法通过使用来获得移动方式keyReleaseEvent.

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:


    }
}
Run Code Online (Sandbox Code Playgroud)

lpa*_*app 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果您继续添加更多按钮,此代码可能会很容易变得乏味。我会把它们放进一个容器里。然后,我将根据焦点切换逻辑迭代该容器的正向和反向顺序。

请参阅文档了解更多详细信息:

焦点:const bool

该属性保存该小部件(或其焦点代理)是否具有键盘输入焦点。

默认情况下,该属性为 false。

注意:获取小部件的此属性的值实际上等同于检查 QApplication::focusWidget() 是否引用该小部件。

访问函数: bool hasFocus() const