[teils gelöst] QWidget's / setFocus() / raise() ?!
[teils gelöst] QWidget's / setFocus() / raise() ?!
Hiho,
ich habe mein Hauptprogramm (QWidget), welches bei einem bestimmten Event eine QTableWidget angezeigt. Diese Tabelle ist aber nicht das Kind vom Hauptprogramm!! (Eigenständiges Fenster, was im selben Prozess läuft)
Wenn ich in eine Zelle der Tabelle klicke, möchte ich den Fokus wieder auf das Hauptprogramm bekommen.
Die Methoden setFocus(), raise() oder lower() haben in den verschiedenen Kombinationen bisland nicht zum erfolg geführt.
Hat da jemand eine Idee?
Grüße Pixtar
PS: Ich sollte vielleicht noch erwähnen, dass das QTableWidget als Qt::Dialog mit dem Attribut Qt::WindowStaysOnTopHint geöffnet/angezeigt wird.
ich habe mein Hauptprogramm (QWidget), welches bei einem bestimmten Event eine QTableWidget angezeigt. Diese Tabelle ist aber nicht das Kind vom Hauptprogramm!! (Eigenständiges Fenster, was im selben Prozess läuft)
Wenn ich in eine Zelle der Tabelle klicke, möchte ich den Fokus wieder auf das Hauptprogramm bekommen.
Die Methoden setFocus(), raise() oder lower() haben in den verschiedenen Kombinationen bisland nicht zum erfolg geführt.
Hat da jemand eine Idee?
Grüße Pixtar
PS: Ich sollte vielleicht noch erwähnen, dass das QTableWidget als Qt::Dialog mit dem Attribut Qt::WindowStaysOnTopHint geöffnet/angezeigt wird.
Zuletzt geändert von Pixtar am 11. August 2011 14:07, insgesamt 2-mal geändert.
Re: QWidget's / setFocus() / raise() ?!
hast du des auch mal mit SIGNALS und SLOTS ausprobiert?
Re: QWidget's / setFocus() / raise() ?!
Verstehe deine Frage nicht ganz slim10 ... ob ich das nun über SIGNAL/SLOT löse oder die Methoden in Funktionen aufrufen, sollte (zumindest in meinen Gedankengang) keinen unterschied machen!
Sprich:
Ob so ...
oder so ..
.. sollte das selbe sein!
Sprich:
Ob so ...
Code: Alles auswählen
connect(tableWidget,SIGNAL(cellClicked(int,int)),this,SLOT(selectCell(int,int)));
[..]
void Widget::selectCell(int x, int y){
[..]
this->setFocus();
}
Code: Alles auswählen
connect(tableWidget,SIGNAL(cellClicked(int,int)),this,SLOT(selectCell(int,int)));
connect(tableWidget,SIGNAL(cellClicked(int,int)),this,SLOT(setFocus());
Re: QWidget's / setFocus() / raise() ?!
naja so wie du des geschrieben hast net ganz...
ich denke das dieser connect nicht so funktionieren wird
wie hast du des gemacht? mit der Methode oder den 2 connects?
Code: Alles auswählen
connect(tableWidget,SIGNAL(cellClicked(int,int)),this,SLOT(setFocus());
wie hast du des gemacht? mit der Methode oder den 2 connects?
Re: QWidget's / setFocus() / raise() ?!
Nach Methode 1 .. also nur den Connect auf die Methode und in der Methode halt die verschiedenen Funktionen ala raise(), setFocus() bzw. clearFocus() probiert!
PS: Solch ein Connect wie ich ihn angegeben habe, ist vollkommen i.O. - warum sollte der nicht funktionieren?!
Soetwas geht in C++ auch:
PS: Solch ein Connect wie ich ihn angegeben habe, ist vollkommen i.O. - warum sollte der nicht funktionieren?!
Code: Alles auswählen
connect(tableWidget,SIGNAL(cellClicked(int,int)),this,SLOT(setFocus());
Code: Alles auswählen
//Deklaration
void setXYZ();
[..]
//Definition
void setXYZ(){
//do something
}
[..]
int f=300;
setXYZ(f);
Re: QWidget's / setFocus() / raise() ?!
So etwas geht in C++ nicht! Die Signaturen müssen passen, setXYZ() und setXYZ(int) sind NICHT identisch!Pixtar hat geschrieben: Soetwas geht in C++ auch:Code: Alles auswählen
//Deklaration void setXYZ(); [..] //Definition void setXYZ(){ //do something } [..] int f=300; setXYZ(f);
Der connect geht aber, SLOTS dürfen weniger Argumente haben als die SIGNALS, wobei man nur "von rechts wegnehmen" darf, sig(int, int) und slot(int) passt, sig(int, int) und slot(QString) past nicht.
Re: QWidget's / setFocus() / raise() ?!
Okay, franzf dann gehts halt nur bei den SIGNAL/SLOTS ... löst aber leider nicht mein Problem, gä ? 
Re: QWidget's / setFocus() / raise() ?!
Code: Alles auswählen
[..]
tableWidget->clearFocus();
tableWidget->lower();
this->raise();
this->setFocus(Qt::ActiveWindowFocusReason);
this->setFocus();
[..]
NACHTRAG: Da ich viele QTableWidgets habe, habe ich das Widget verwechselt ...
tableWidget->lower(); funktioniert schon einmal (obwohl es Qt::WindowStaysOnTopHint) hat, es wird der "Z-Index" neugesetzt und es verschwindet hinter allen anderen Fenstern, ABER es will einfach nicht seinen Focus auf-/abgeben
Habe nun noch zusätzlich mit der focusPolicy herumgespielt, was aber auch nichts ändert ...
Re: QWidget's / setFocus() / raise() ?!
Eine wirklich wirklich w i r k l i c h beknackte Methode um dieses Problem zu lösen:
(gehe davon aus, das Qt::WindowStaysOnTopHint hier das Hauptproblem ist)
Wer was anderes in petto hat - her damit 
(gehe davon aus, das Qt::WindowStaysOnTopHint hier das Hauptproblem ist)
Code: Alles auswählen
this->hide();
this->show();