Hi,
kann sein, das ich hier auf den Schlauch steh und das Problem ganz einfach zu lösen ist.
Jedenfalls möchte ich in einen Hauptfenster per Tab-Taste zwischen zwei bestimmten Widget hin- und herschalten, und zwar unabhängig welches Widget den Focus hat.
Also so ähnlich wie bei einen 2-Panel-Filemanager.
Es können aber noch andere Widgets den Focus haben, trotzdem soll bei Druck auf Tab der Focus entsprechend gewechselt werden.
Bsp.: ein Hauptfenster mit einen LineEdit und 2 TableViews. Zwischen den TableViews soll gewechselt werden. Den aktuellen Focus hat jetzt aber das LineEdit.
Nun, ich könnte von jedem Widget, was den Focus erhalten könnte eine Klasse ableiten und die KeyPressedEvents überschreiben. Das erscheint mir aber nicht sehr elegant.
Hat jemand eine Lösung?
[gelöst]Keyboard-Hook in QMainWindows
[gelöst]Keyboard-Hook in QMainWindows
Zuletzt geändert von -Marco- am 13. Oktober 2006 13:15, insgesamt 1-mal geändert.
hi
mach folgendes
setTabOrder(left, right);
setTabOrder(right, left);
wobei left der Linke View ist und right der rechte.
hab das in ein kleines test programm bei mir gepackt und zusätzlich noch 2 combofelder reingetan und es lief.
Wenn man nun innerhalb der Combofelder auf tab drückte sprang es wieder in das zuleft aktivierte view hinein. das dürft doch das sein was du möchtest ?
mfg
mach folgendes
setTabOrder(left, right);
setTabOrder(right, left);
wobei left der Linke View ist und right der rechte.
hab das in ein kleines test programm bei mir gepackt und zusätzlich noch 2 combofelder reingetan und es lief.
Wenn man nun innerhalb der Combofelder auf tab drückte sprang es wieder in das zuleft aktivierte view hinein. das dürft doch das sein was du möchtest ?
mfg
Moin,
mmh, ich habe mir auch mal ein kleines Testprojekt zusammengeschustert, aber irgendwie will das dort nicht so richtig.
Die EditFelder entsprechen den Views.
Die einzelnen Steuerelemente bekommen immer noch nacheinander den Fokus.
mmh, ich habe mir auch mal ein kleines Testprojekt zusammengeschustert, aber irgendwie will das dort nicht so richtig.
Code: Alles auswählen
class MainWindow : public QMainWindow
{
public:
MainWindow()
{
QFrame* frame = new QFrame(this);
this->setCentralWidget(frame);
QSplitter* splitter = new QSplitter(Qt::Horizontal, frame);
QLineEdit* edit1 = new QLineEdit(splitter);
QLineEdit* edit2 = new QLineEdit(splitter);
QVBoxLayout* layout = new QVBoxLayout(frame);
layout->addWidget(splitter);
QComboBox* cb;
for (int i = 0; i < 5; i++)
{
cb = new QComboBox();
layout->addWidget(cb);
}
QWidget::setTabOrder(edit1, edit2);
QWidget::setTabOrder(edit2, edit1);
this->setGeometry(0, 0, 600, 400);
}
};
Die einzelnen Steuerelemente bekommen immer noch nacheinander den Fokus.
Gruß Marco
Moin,
ich habe mich nochmal mit der Sache auseinandergesetzt und siehe da, wie schon ganz oben erwähnt, ist des Rätsels Lösung einfacher als erwartet.
Das Zauberwort heißt hier QAction bzw. setShortcut in Verbindung mit dem Tab-Key.
Dieses QAction wird dem Hauptfenster per addAction untergeschoben und dann funktioniert so wie es soll.
Einfacher gehts nicht, man muß nur wissen wie es geht.
ich habe mich nochmal mit der Sache auseinandergesetzt und siehe da, wie schon ganz oben erwähnt, ist des Rätsels Lösung einfacher als erwartet.
Das Zauberwort heißt hier QAction bzw. setShortcut in Verbindung mit dem Tab-Key.
Dieses QAction wird dem Hauptfenster per addAction untergeschoben und dann funktioniert so wie es soll.
Einfacher gehts nicht, man muß nur wissen wie es geht.
Gruß Marco