【问题标题】:Switching between one QToolButton to another in QT在 QT 中在一个 QToolButton 和另一个 QToolButton 之间切换
【发布时间】:2014-02-02 08:00:34
【问题描述】:

我想从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:


    }
}

【问题讨论】:

  • 使用`QToolBar::addAction()`向工具栏添加按钮不是更容易吗?
  • 好的,我将使用 addAction 添加按钮。但是如何从一个按钮导航到另一个按钮?
  • 对于导航或触发特定按钮,您可以使用QAction::setShortcut() 函数为每个按钮分配一个快捷方式。
  • 我不想添加快捷方式。我想使用 KeyReleaseEvent 进行导航
  • 这叫焦点。例如if (button1->hasFocus()) { button2->setFocus(); }

标签: c++ qt qtgui qmainwindow qtoolbar


【解决方案1】:

您需要检查焦点,并酌情转移。我会这样写:

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() 是否引用小部件。

访问功能: bool hasFocus() 常量

【讨论】:

  • 现在按一次 Key_left 或 Key_Right 会自动移动两次。如何控制?
猜你喜欢
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多