Se ho capito bene la domanda, avete due QTableView
s all'interno di un unico QMainWindow
(per esempio, utilizzando un QGridLayout
) ed eventualmente altri QWidget
s, e si desidera navigare il focus tastiera tra di loro, ma non è possibile perché la messa a fuoco della tastiera rimane su un QTableView
(molto probabilmente il primo).
Se questo è il caso, si dovrebbe provare queste opzioni (possibilmente insieme):
In primo luogo, reimplementa il keyPressEvent del vostro QTableView
come questo:
void MyTableView::keyPressEvent (QKeyEvent * event)
{
if(event->key() == Qt::Key_Tab)
event->ignore();
else
QTableView::keyPressEvent(event);
}
In secondo luogo, nel costruttore di voi tavolo vista, disabilitando punto focale della tastiera (in modo che il ciclo si concentrerà attraverso i vostri altri widget solo utilizzando Tab)
void MyTableView::MyTableView()
{
setFocusPolicy(Qt::ClickFocus); // allow giving focus with mouse click,
// but not with TAB key
}
Infine, nel costruttore del tuo QMainWindow
, dopo aver creato e aggiunto le viste di tabella nel layout, puoi dare alla finestra principale lo stato attivo (che deve essere preso dalle viste della tabella, a meno che tu non abbia fatto il secondo punto), chiamando:
void MyMainWindow::MyMainWindow()
{
setFocus(Qt::OtherFocusReason);
}
Aggiornamento
Il seguente esempio minimale completa compila e funziona come previsto per me: ho due TableView
s uno accanto all'altro sulla parte superiore, e due pulsanti sulla parte inferiore. L'utilizzo della scheda Tab si sposta tra questi 4 widget, senza modificare le cui celle sono selezionate/evidenziate negli TableView
s. Posso focalizzare l'attenzione su un TableView
desiderato selezionandoli con il mouse o usando la scheda Tab. Una volta messo a fuoco lo desiderato, posso spostarmi tra le celle usando le frecce della tastiera (o facendo clic con il mouse).
#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();
}
La domanda non è chiara per me. Stai chiedendo che la chiave 'Tab' non funzioni come ti aspetti, quando hai due' QTableView's in una 'QMainWindow'? Qual è il comportamento che ti aspetti e qual è il comportamento che ottieni? Inoltre, per favore fornisci del codice su come hai creato 'QTableView's e li hai inseriti all'interno di' QMainWindow'. – Boris
Nel codice non è niente di speciale. Il mio problema è che qtableview ingoia TAB perché sposta il puntatore sulla cella. Lo posto qui. Un momento. Ma quando lo provi, devi avere lo stesso problema. Posiziona due QTableView (con qualsiasi oggetto e qualsiasi colonna) in MainWindow e poi premi la scheda per cambiare focus in seconda qtableview. Fallisci in questo momento. Perché la scheda verrà catturata e rimarrà in QTableView (non emessa nella finestra principale). – exo