我自定义了一个对话框,按下 Tab 键时,焦点从按钮切换到表格小部件。我希望在遍历完表格小部件中的所有项目后,焦点返回到初始按钮。这是一个最小的可重现示例:
#include <QApplication>
#include <QPushButton>
#include <QTableWidget>
#include <QVBoxLayout>
class Widget : public QWidget
{
public:
explicit Widget()
{
setLayout(&vl);
tw.setRowCount(1);
tw.setColumnCount(3);
vl.addWidget(&btn);
vl.addWidget(&tw);
}
bool focusNextPrevChild(bool next)
{
QWidget* focusWidget = this->focusWidget();
if (focusWidget == &tw)
{
int currentRow = tw.currentRow();
int currentCol = tw.currentColumn();
int lastRow = tw.rowCount() - 1;
int lastCol = tw.columnCount() - 1;
if (next && currentRow == lastRow && currentCol == lastCol)
{
tw.clearFocus();
return true;
}
}
return QWidget::focusNextPrevChild(next);
}
private:
QPushButton btn;
QTableWidget tw;
QVBoxLayout vl;
};
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
我尝试重写该focusNextPrevChild
函数,但没有成功。一旦焦点进入表格小部件,它就无法离开它。