Wenn ich die Frage richtig verstanden habe, haben Sie zwei QTableView
s in einem einzigen QMainWindow
(zum Beispiel eine QGridLayout
verwendet wird) und möglicherweise auch andere QWidget
s, und Sie möchten die Tastaturfokus zwischen ihnen navigieren, aber Sie können nicht, weil der Tastaturfokus auf einem QTableView
(wahrscheinlich der erste) bleibt.
Wenn dies der Fall ist, sollten Sie diese Optionen versuchen (möglicherweise zusammen):
Zuerst reimplementiert die keyPressEvent Ihrer QTableView
wie folgt aus:
void MyTableView::keyPressEvent (QKeyEvent * event)
{
if(event->key() == Qt::Key_Tab)
event->ignore();
else
QTableView::keyPressEvent(event);
}
Zweitens im Konstruktor Sie Tabelle Ansicht, deaktivieren Tastaturfokus (so dass der Fokus schaltet durch Ihre anderen Widgets nur mit Tab)
void MyTableView::MyTableView()
{
setFocusPolicy(Qt::ClickFocus); // allow giving focus with mouse click,
// but not with TAB key
}
Schließlich können Sie im Konstruktor Ihrer QMainWindow
nach dem Erstellen und Hinzufügen der Tabellenansichten im Layout den Hauptfokus angeben (der von den Tabellenansichten übernommen wurde, außer Sie haben den zweiten Punkt ausgeführt).
void MyMainWindow::MyMainWindow()
{
setFocus(Qt::OtherFocusReason);
}
aktualisiert
Das folgende komplette minimal Beispiel kompiliert und arbeitet als für mich erwartete: ich habe zwei TableView
s nebeneinander an der Spitze, und zwei Tasten auf der Unterseite. Mit Tab Zyklen zwischen diesen 4 Widgets, ohne zu ändern, deren Zellen sind in der TableView
s markiert/hervorgehoben. Ich kann den Fokus auf einen gewünschten TableView
entweder durch Auswahl mit der Maus oder durch Verwendung von Tab. Sobald der Fokus auf der gewünschten TableView
liegt, kann ich mit den Tastaturpfeilen durch die Zellen gehen (oder mit der Maus klicken).
#include <QtGui>
class TableView: public QTableView
{
void keyPressEvent(QKeyEvent * event)
{
if(event->key() == Qt::Key_Tab)
event->ignore();
else
QTableView::keyPressEvent(event);
}
};
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
QGridLayout * layout = new QGridLayout();
// the first Model/View pair
QFileSystemModel * model1 = new QFileSystemModel();
model1->setRootPath(QDir::rootPath());
TableView * view1 = new TableView();
view1->setModel(model1);
layout->addWidget(view1,0,0);
// the second Model/View pair
QFileSystemModel * model2 = new QFileSystemModel();
model2->setRootPath(QDir::rootPath());
TableView * view2 = new TableView();
view2->setModel(model2);
layout->addWidget(view2,0,1);
// Other widgets
layout->addWidget(new QPushButton("Hello"),1,0);
layout->addWidget(new QPushButton("World"),1,1);
// Create the window containing them and show it
QWidget * w = new QWidget();
w->setLayout(layout);
w->show();
return app.exec();
}
Die Frage ist mir nicht klar. Fragen Sie, ob die 'Tab'-Taste nicht wie erwartet funktioniert, wenn Sie zwei' QTableView' in einem 'QMainWindow' haben? Was ist das Verhalten, das Sie erwarten, und welches Verhalten erhalten Sie stattdessen? Bitte geben Sie auch einen Code an, wie Sie die 'QTableView's erstellt und in das' QMainWindow' eingefügt haben. – Boris
In Code ist nichts besonderes. Mein Problem ist, dass qtableview TAB schluckt, weil der Zeiger auf die Zelle verschoben wird. Ich platziere es hier. Einen Moment. Aber wenn Sie es versuchen, müssen Sie das gleiche Problem haben. Platzieren Sie zwei QTableView (mit beliebigen Elementen und beliebigen Spalten) in MainWindow und drücken Sie dann die Taste, um den Fokus auf die zweite qtableview zu ändern. Du versagst in diesem Moment. Weil die Registerkarte gefangen wird und in QTableView bleibt (nicht im Hauptfenster). – exo