5

我想从一个切换QToolButton到另一个QToolBar。我用过QStackedWidget,它们从一个移动widget到另一个太简单了,但在这里我无法通过 using 获得如何移动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:


    }
}
4

1 回答 1

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

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

有关详细信息,请参阅文档:

焦点:常量布尔

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

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

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

访问函数: bool hasFocus() const

于 2014-01-14T21:50:46.187 回答