Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 27

Thema: Probleme mit Qt

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Question Probleme mit Qt

    Hallo Leute,
    ich bin gerade dabei, mit Hilfe von Qt ein Programm zu schreiben.
    Dabei sind zwei Probleme aufgetreten:
    1. Das Clipboard für Copy/Paste/Cut funktioniert nicht richtig. Wenn ich mich innerhalb meines Programmes befinde, kann ich kopieren und einfügen, wie ich will. Ich kann auch aus meinem Programm Text in andere Programme wie nedit (ich arbeite unter Suse 8.1)
    kopieren. Umgekehrt geht es aber nicht. Es ist so, als würde die Zwischenablage ihren Inhalt "vergessen". Lasse ich die ganze Zeit das Clipboard geöffnet, ist dies nicht der Fall. KDevelop hat übrigens dasgleiche Problem.
    2. Ich möchte vor dem Schließen meines Programmes abfragen, ob gespeichert werden soll. Beendet man mein Programm über "Exit" unter "File", kann ich das auch machen. Beendet der Benutzer das Programm über das "X" rechts oben im Fenster, wird das Programm geschlossen, ohne dass ich diese Abfrage machen kann, da ich nicht weiß, wie ich das Signal abfangen kann. Es gibt eins, das man abfangen kann, aber danach kann man nichts mehr abfragen. Man könnte dann nur automatisch abspeichern. Wie kommt man an dieses "X" heran? Ich kann es noch nicht einmal deaktivieren.

    Vielen Dank,
    Kirstin
    Kirstin

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Re: Probleme mit Qt

    Original geschrieben von Kirsche
    1. Das Clipboard für Copy/Paste/Cut funktioniert nicht richtig. Wenn ich mich innerhalb meines Programmes befinde, kann ich kopieren und einfügen, wie ich will. Ich kann auch aus meinem Programm Text in andere Programme wie nedit (ich arbeite unter Suse 8.1)
    kopieren. Umgekehrt geht es aber nicht. Es ist so, als würde die Zwischenablage ihren Inhalt "vergessen". Lasse ich die ganze Zeit das Clipboard geöffnet, ist dies nicht der Fall. KDevelop hat übrigens dasgleiche Problem.
    Hmm. MIt Clipboard hatte ich bisher noch nicht zu tun.
    Ist der Inhalt der anderen Applikation im Clpboard oder in Selection (Spezialclipboard für markiertem Text)?


    2. Ich möchte vor dem Schließen meines Programmes abfragen, ob gespeichert werden soll. Beendet man mein Programm über "Exit" unter "File", kann ich das auch machen. Beendet der Benutzer das Programm über das "X" rechts oben im Fenster, wird das Programm geschlossen, ohne dass ich diese Abfrage machen kann, da ich nicht weiß, wie ich das Signal abfangen kann. Es gibt eins, das man abfangen kann, aber danach kann man nichts mehr abfragen. Man könnte dann nur automatisch abspeichern. Wie kommt man an dieses "X" heran? Ich kann es noch nicht einmal deaktivieren.
    Ich schätze am enfachsten ist es, in deinem Hauptfenster die Methode closeEvent zu ünerschreiben und dann eine Methode aufzurufen, die dieses Exithandling macht.
    Solange du das Event nicht an die Basisklasse weiter gibts, wird es sich nicht schliessen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    es hoert sich doof an, aber nach meinen eindruecken gibt es nicht "ein" clipboard sondern mehrere. nach meinem eindruck teilen sich qtprogramme eins, und der rest eins.. ich weiss nicht warum, aber es scheint so zu sein

  4. #4
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Thumbs up closeEvent klappt

    Hallo anda_skoa,
    vielen Dank für deine Hilfe. Es hat mit dem Überschreiben geklappt. Jetzt erfolgt die Abfrage auch, wenn man auf das "X" klickt.

    Kirstin
    Kirstin

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Question Cipboard

    Hallo anda_skoa, hallo tuxipuxi,
    ich habe folgendes geöffnet:
    System->WM->X-Clipboard
    Lasse ich dieses während des Kopiervorganges geöffnet, klappt alles. Mache ich es zu, kann ich
    von außerhalb nichts in mein Programm einfügen. Das gilt auch für KDevelop.

    "Selection" kenne ich nicht. Ist das auch ein Extraprogramm wie X-Clipboard?

    Kirstin
    Kirstin

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von tuxipuxi
    es hoert sich doof an, aber nach meinen eindruecken gibt es nicht "ein" clipboard sondern mehrere. nach meinem eindruck teilen sich qtprogramme eins, und der rest eins.. ich weiss nicht warum, aber es scheint so zu sein
    Ich glaube das ist so:
    X11 spezifiziert 3 Clipboards: SELECTION, PRIMARY und SECONDARY.
    SELECTION ist das, was makriert wurde und was mit mittlerer Maustaste eingefüht wird.
    PRIMARY ist das normale Clipboard, welches mit CTRL+X/C/V benutzt wird.

    Ich glaube QClipboard arbeitet mit PRIMARY.

    Soweit ich weiß gibt es dann zB in Klipper (KDE Clipboard Utility) die Möglichkeit SELECTION und PRIMARY zu synchronisieren.
    Dabei wird glaub ich da Clipboard mit dem Inhalt von SELECTION überschrieben. Oder wars umgekehrt?

    Wie gesagt, alles ziemlich spekulativ, Clipboard hab ich noch nicht gemacht.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Clipboard

    Hi,

    hab mich jetzt mit Clipboard beschäftigt, der Zustand des Nichtwissens war ja schon untragbar

    Ich hab eine kleine Testapplikation angehängt.
    (die .txt Endung wegnehmen, es ist ein .tgz)

    Sie reagiert auf Änderungen von Selection und Clipboard.
    Das oberste Text Feld ist read/write, die beiden unteren sind read-only.
    Copy/cut/paste funktionieren im ersten Feld mit Testenkombinationen wie gewohnt, mit den Toolbarbuttons hab ich es ein bischen anders implementiert (nimmt immer den ganzen Text, muss nix markiert sein)

    Einfach auch das Zusammenspiel mit anderen Applikationen ausprobieren.

    Ich hoffe es hilft ein bischen weiter.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,


    irgendwas stimmt da mit dem Makefile nicht oder fehlt qmake/ist was falsch an qmake bei mir.

    Code:
    [tuxipuxi@localhost clipboard]$ make
    make: *** No rule to make target `/mkspecs/linux-g++/qmake.conf', needed by `Makefile'.  Stop.
    wenn ich das ueber einen normalen g++ aufruf kompilieren will bekomme ich fehler.

    wie ist das gedacht?

  9. #9
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Smile Danke

    Hallo anda_skoa,
    vielen Dank für deine Mühe. Da ich gerade Windows hochgefahren habe, um Siedler IV zu spielen, schaue ich mir morgen deine Datei an und probiere damit Verschiedenes aus. Da programmiere ich dann ausgeruht weiter. Jetzt bin ich zu müde.
    Schöne Grüße,
    Kirstin
    Kirstin

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von tuxipuxi
    irgendwas stimmt da mit dem Makefile nicht oder fehlt qmake/ist was falsch an qmake bei mir.
    Du musst QTDIR gesetzt haben und wahrscheinlich auch QMAKESPEC

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    ah hab vergessen QTDIR zu setzen... hab das jetzt in ~/.bashrc

  12. #12
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Unhappy Problem

    Hallo anda_skoa,
    ich habe gerade versucht, Teile aus deinem Programm in meins zu übertragen.
    Beim Compilieren meines Programms bekomme ich immer die Fehlermeldung:

    interface.cpp:75: `Clipboard' is not a member of type `QClipboard'

    Woran kann das liegen?

    Außerdem habe ich noch das Problem, dass ich nicht weiß, wie ich dein Programm kompilieren soll.
    Ich kenne mich unter Linux kaum aus und bin froh, dass KDevelop für mich das Kompilieren übernimmt.

    Darum wollte ich Teile deines Programmes bei mir einbauen, um sie dort auszuprobieren.

    Ist es eigentlich ein Problem, dass ich vorher nicht weiß, wo ich einfügen will? Ich habe nämlich
    zweimal QTextEdit. Es soll entweder in das eine oder andere eingefügt werden. Wie es der Bunutzer will. QTextEdit hat copy/paste/cut schon eingebaut. Dort reden sie immer von "Selection 0". Damit kopiere ich wohl innerhalb meines Programmes.
    Jetzt muss ich irgendwie die beiden internen Clipboards mit dem globalen synchronisieren.
    Ich weiß nur noch nicht wie.

    Kirstin
    Kirstin

  13. #13
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477

    Re: Problem

    Hi,

    Original geschrieben von Kirsche
    Hallo anda_skoa,
    ich habe gerade versucht, Teile aus deinem Programm in meins zu übertragen.
    Beim Compilieren meines Programms bekomme ich immer die Fehlermeldung:

    interface.cpp:75: `Clipboard' is not a member of type `QClipboard'

    Woran kann das liegen?
    Offensichtlich wurde dieser Unterscheidungsmechanismus, bzw. die Art wie er verwendet wird, erst in Qt3.1 eingeführt.
    Hab mir gerade die Doku for 3.0.7 bei TT online angesehen und da gibt es den enum noch nicht.

    Wenn ich die Doku zu 3.0 richtig verstehe, kann man mit setSelectionMode bestimmen, ob die Daten nach Selection oder ins Clipboard kommen.
    Allerdings holen kann man den Inhalt der Selection nicht, nur den Inhalt von Clipboard.

    Eventuell hast du die Möglichkeit, auf eine aktuellere Version von Qt aufzurüsten.


    Außerdem habe ich noch das Problem, dass ich nicht weiß, wie ich dein Programm kompilieren soll.
    Ich kenne mich unter Linux kaum aus und bin froh, dass KDevelop für mich das Kompilieren übernimmt.
    Ah, sorry.
    Ich hab da qmake verwendet.
    qmake ist ein Tool von Trolltech, dass aus einer Projektdatei (.pro) ein Makefile generiert.
    Du kannst dir die Lektion (4 oder 5) in unserem Qt Tutorials dazu ansehen.

    Im wesentlichen geht man so vor:
    1) setzen der Umgebungsvariablen QTDIR und QMAKESPEC, falls sie noch nicht gesetzt sind.
    2) erstellen des Makefiles mit qmake.

    (2) sollte bei meinem Beispiel automatisch gehen, wenn (1) erfüllt ist und man make aufruft.


    Ist es eigentlich ein Problem, dass ich vorher nicht weiß, wo ich einfügen will? Ich habe nämlich zweimal QTextEdit. Es soll entweder in das eine oder andere eingefügt werden. Wie es der Bunutzer will.
    Hmm, du meinst über das Menü oder den Toolbar?

    (Beim Benutzen der Tastenkombinationen ist der Focus ja eindeutig auf einem der beiden TextEdits, der das wahrscheinlich sogar automatisch macht.)


    QTextEdit hat copy/paste/cut schon eingebaut. Dort reden sie immer von "Selection 0". Damit kopiere ich wohl innerhalb meines Programmes.
    Jetzt muss ich irgendwie die beiden internen Clipboards mit dem globalen synchronisieren.
    Ich weiß nur noch nicht wie.
    Soweit ich das verstanden habe ist Selection 0 die erste Textselection im TextEdit (der TextEdit unterstützt multiple Selektion)
    Das hat ansich nix mit dem Clipboard "Selection" (Mouseselectio) zu tun.

    Meine Vermutung: in Qt3.0 wird immer ins Clipboard kopiert und bei
    QClipboard::setSelectionMode(true) zusätzlich ins Mouseselection.

    Geholt wird glaub ich immer nur aus dem Clipboard, egal was der selection Mode ist.
    Kann das aber schwer nachprüfen, ich hab Qt >= 3.1
    Ich könnte morgen in der Firma ein Beispiel mit Qt3.0.3 versuchen, falls sich bis dahin nichts verbessert.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  14. #14
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    226

    Unhappy Seltsam

    Hallo anda_skoa,
    angeblich habe ich Qt 3.1 auf meinem Rechner. Jedenfalls behauptet das mein QT-Designer. Dort
    im Manual steht auch die Version mit QClipboard:Clipboard.
    Allerdings steht im Yast2, dass ich qt 3.0.5 - 64 installiert habe.
    Ich habe mir mal 3.1 heruntergeladen und compiliert. Es lief aber nicht. Anschließend habe ich qt von der Suse8.1-CD installiert. Ist da vielleicht was durcheinander gekommen?

    Was wirklich seltsam ist: Wenn ich das X-Clipboard geöffnet lasse, klappt das Kopieren.
    Noch eine Möglichkeit besteht darin, dass ich Klipper öffne und da einen der Einträge mit einem
    Häkchen versehe. Dann kann ich diesen Eintrag auch in mein Programm kopieren.

    Mein Programm merkt auch, wenn außerhalb etwas kopiert wurde. Dann ist nämlich das interne Clipboard leer. Ich hätte ja vermutet, dass es gar nichts davon merkt.
    Seltsam, seltsam.
    Schöne Grüße,
    Kirstin
    Kirstin

  15. #15
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,

    Qt laesst sich nicht auf die "normale" art kompilieren und installieren. der ordner in dem es kompiliert wird, ist auch der in dem spaeter die includes liegen.

    in dem archiv ist ein INSTALL file, lies dir das am besten mal durch, ist gut erklaert.

    mach es am besten genauso.. ich erinnere mich an einen verhauenen versuch bei dem mein g++ gleich mitgestorben ist( frag mich nicht wie das passiert ist ).

    ich glaube kaum das suse 8.1 schon 3.1 hat, ich glaube das war erst in 8.2 .. bin mir aber nicht sicher, benutze kein suse.

    gruss,

    tuxipuxi.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •