Ich muss feststellen, wann meine Qt 4.4.1 Anwendung den Fokus erhält.Wie erkenne ich in Qt 4.4.1 Focus-In auf Anwendungsebene?
Ich habe zwei mögliche Lösungen gefunden, aber beide funktionieren nicht genau so, wie ich es möchte.
In der ersten möglichen Lösung, die eine Verbindung I focuschanged() Signals von qApp zu einem Schlitz. Im Slot überprüfe ich den "alten" Zeiger. Wenn es "0" ist, dann weiß ich, dass wir zu dieser Anwendung gewechselt haben und ich mache was ich will. Dies scheint die zuverlässigste Methode zu sein, die Anwendung dazu zu bringen, den Fokus der beiden hier vorgestellten Lösungen zu erkennen, leidet jedoch an dem unten beschriebenen Problem.
In der zweiten möglichen Lösung, overrode ich die ‚focusInEvent()‘ Routine, und tun, was ich, wenn der Grund wollen, ist ‚ActiveWindowFocusReason‘.
In diesen beiden Lösungen wird der Code zu Zeiten ausgeführt wird, wenn ich es sein, nicht will.
Zum Beispiel habe ich diesen Code haben, der die focusInEvent() Routine überschreibt:
void
ApplicationWindow::focusInEvent(QFocusEvent* p_event)
{
Qt::FocusReason reason = p_event->reason();
if(reason == Qt::ActiveWindowFocusReason &&
hasNewUpstreamData())
{
switch(QMessageBox::warning(this, "New Upstream Data Found!",
"New upstream data exists!\n"
"Do you want to refresh this simulation?",
"&Yes", "&No", 0, 0, 1))
{
case 0: // Yes
refreshSimulation();
break;
case 1: // No
break;
}
}
}
Wenn dies ausgeführt wird, wird das QMessageBox Dialog. Wenn der Dialog jedoch durch Drücken von entweder 'Ja' oder 'Nein' beendet wird, wird diese Funktion sofort erneut aufgerufen, da der Fokus zu diesem Zeitpunkt mit ActiveWindowFocusReason zurück in das Anwendungsfenster geändert wurde. Offensichtlich möchte ich nicht, dass das passiert.
Ebenso, wenn der Benutzer die Anwendung öffnet & Schließen von Dialogen und Fenstern usw., möchte ich diese Routine nicht aktivieren. HINWEIS: Ich bin mir nicht sicher, unter welchen Umständen diese Routine aktiviert ist, da ich ein bisschen probiert habe und es nicht für alle Fenster & Dialoge passiert, obwohl es zumindest für den im Beispielcode gezeigten Fall passiert .
Ich will es nur aktivieren, wenn die Anwendung von einem Ort außerhalb dieser Anwendung fokussiert ist, nicht, wenn das Hauptfenster von anderen Dialogfenstern in fokussiert ist.
Ist das möglich? Wie kann das gemacht werden?
Danke für jede Information, denn das ist sehr wichtig für unsere Anwendung zu tun.
Raymond.