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)
您需要检查焦点,并适当地转移焦点。我会写这样的东西:
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)
请注意,如果您继续添加更多按钮,此代码可能会很容易变得乏味。我会把它们放进一个容器里。然后,我将根据焦点切换逻辑迭代该容器的正向和反向顺序。
请参阅文档了解更多详细信息:
该属性保存该小部件(或其焦点代理)是否具有键盘输入焦点。
默认情况下,该属性为 false。
注意:获取小部件的此属性的值实际上等同于检查 QApplication::focusWidget() 是否引用该小部件。
访问函数: bool hasFocus() const