QFileSystemWatcher triggert nicht

Alles rund um die Programmierung mit Qt
Antworten
Gepe
Beiträge: 2
Registriert: 10. Mai 2013 22:22

QFileSystemWatcher triggert nicht

Beitrag von Gepe »

Hallo,
Ich habe eine erste Qt Anwendung geschrieben, die auf LINUX läuft. Unter anderem verwende ich dabei die Klasse QFileSystemWatcher, um reagieren zu können wen ein spezielles File verändert wird.

Zum Debuggen starte ich die Applikation direkt via Konsole (wenn bereits kompiliert) oder via qtcreator. Das funktioniert dann problemlos. Wenn ich also das betreffende File verändere (z.B. touch, oder editiere), dann erhält der QFileSystemWatcher das betreffende Signal.

Das Problem taucht erst auf, wenn ich meine kompilierte Qt Anwendung durch einen anderen Prozess (C++, system-Call oder fork) starte.
Die Qt Anwendung kommt dann zwar richtig hoch, und auch alle Features funktionieren, ausser dem QFileSystemWatcher. Er bemerkt jetzt nicht mehr, wenn das betreffende File verändert wurde.

Was ich ausversucht habe:
- Weder das fileChanged noch das directoryChanged Signal funktionieren
- ich bin absolut sicher, dass der Pfad zu diesem file korrekt ist (weil ich z.B. via Qt Anwendung auch dorthin schreiben kann).
- Die Environment-variablen sehen deutlich anders aus (wenn ich sie via Qt-Anwendung auslese) für den Fall dass es via Konsole gestartet wird, bzw durch den anderen Prozess. Nur weiss ich nicht, was da wichtig ist.

Hat jemand eine Idee wo ich suchen könnte?

Gepe
Gepe
Beiträge: 2
Registriert: 10. Mai 2013 22:22

Re: QFileSystemWatcher triggert nicht

Beitrag von Gepe »

Inzwischen habe ich zumindest einen Workaround gefunden:
Völliges Abstreifen der Vererbung (inheritance), indem ich nicht mehr die Qt-Anwendung direkt starte, sondern ein shell-Script, welches ich dafür vorbereitet habe:

Mein Shell-Script sieht somit folgendermassen aus:

Code: Alles auswählen

#! /bin/ksh
myQtAnwendung&
Dieses Shell-Script rufe ich jetzt in C++ mit einem system-call auf.
Dadurch wird meine Qt-Anwendung mit gleichen Rechten gestartet, wie wenn ich sie auf einer Konsole starte. So funktioniert es zumindest scheinbar befriedigend.
Antworten