如何使用TAB键来聚焦两个qpushbutton中的一个

时间:2015-09-03 12:06:50

标签: qt qpushbutton

在一个小部件中,我放了两个QPushButton(左边说“OK”,右边说“EXIT”)。 当我用鼠标按下它们时,它们会定期工作。 假设我想使用TAB键从一个切换到另一个:是否可能? 怎么能这样做?

3 个答案:

答案 0 :(得分:3)

我在KDE / Ubuntu上尝试过。它会自动运行。

的main.cpp

#include <QApplication>
#include "mainwindow.hpp"

int main(int argc, char** args) {
    QApplication app(argc, args);

    MainWindow m;
    m.show();

    return app.exec();
}

mainwindow.hpp

#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP

#include <QMainWindow>

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow();
};

#endif // MAINWINDOW_HPP

mainwindow.cpp

#include "mainwindow.hpp"

#include <QPushButton>
#include <QVBoxLayout>

MainWindow::MainWindow() : QMainWindow() {

    auto* w = new QWidget;
    auto* l = new QVBoxLayout;

    auto* p1 = new QPushButton("ok");
    auto* p2 = new QPushButton("exit");

    l->addWidget(p1);
    l->addWidget(p2);

    w->setLayout(l);
    setCentralWidget(w);
}

a.pro

TEMPLATE = app
TARGET = a
INCLUDEPATH += .

QT += widgets

HEADERS += mainwindow.hpp
SOURCES += main.cpp mainwindow.cpp

QMAKE_CXXFLAGS += -std=c++14

编辑:显然按钮会切换焦点,但按下输入则不会执行任何操作。我想你必须使用与焦点相关的机制(在QWidget documentation中搜索“焦点”)并自己实现它。或者看一下QDialog(在我的例子中作为QMainWindow的替代品)。它应该对enter和escape按钮有一些有意义的默认行为。

旁注:也许您更愿意在项目中使用QDialogButtonBox来表示ok和exit按钮。这是显示确定/取消/接受/拒绝/ ...按钮的跨平台方式,因为它们的布置在平台之间不同。这门课可以帮助你。

答案 1 :(得分:2)

在某些平台上,按钮之间的键盘焦点导航是默认行为,但在某些平台上它不是。

如果您希望在所有平台上进行键盘导航,则按钮应设置Qt::StrongFocus策略。请注意,用于触发按钮的快捷方式也是特定于平台的。例如。在OS X上,您使用 Space

#include <QtWidgets>

int main(int argc, char ** argv) {
   QApplication app{argc, argv};
   QWidget w;
   QVBoxLayout layout{&w};
   // Individual Buttons
   QPushButton p1{"button1"}, p2{"button2"};
   for (auto p : {&p1, &p2}) {
      layout.addWidget(p);
      p->setFocusPolicy(Qt::StrongFocus);
   }
   // A button box
   QDialogButtonBox box;
   for (auto text : {"button3", "button4"})
      box.addButton(text, QDialogButtonBox::NoRole)->setFocusPolicy(Qt::StrongFocus);
   layout.addWidget(&box);

   w.show();
   return app.exec();
}

答案 2 :(得分:2)

比所有代码都容易。只需在两个按钮上使用带有Tabfocus的setFocusPolicy,如下所示:

 yourButtonOk->setFocusPolicy(Qt::TabFocus);
 yourButtonExit->setFocusPolicy(Qt::TabFocus);