在一个小部件中,我放了两个QPushButton(左边说“OK”,右边说“EXIT”)。 当我用鼠标按下它们时,它们会定期工作。 假设我想使用TAB键从一个切换到另一个:是否可能? 怎么能这样做?
答案 0 :(得分:3)
我在KDE / Ubuntu上尝试过。它会自动运行。
#include <QApplication>
#include "mainwindow.hpp"
int main(int argc, char** args) {
QApplication app(argc, args);
MainWindow m;
m.show();
return app.exec();
}
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <QMainWindow>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow();
};
#endif // MAINWINDOW_HPP
#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);
}
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);