tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
406
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    pYroman1ac pYroman1ac ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    11
    Hallo liebe Community!

    Ich bin noch ein Frischling was das Qt-SDK betrifft und stehe vor einen kleinem Problem. Es geht um die Synchronisation mittels Signal and Slot zwischen zwei QTextEdits.

    Ich habe zwei Fenster (sind auch zwei Klassen). Das was in dem einem Fenster passiert soll auch im anderen Fenster passieren.

    Slider, DateTimeEdit, LineEdit is ohne Probleme gegangen. Nur das QTextEdit will nicht.

    Ich hab schon alles mögliche wie z.Bsp.

    Code :
    1
    
    QObject::connect(w.getTextField(), SIGNAL(textChanged(QString)), x.getTextField(), SLOT(setText(QString)));

    probiert, aber nichts will funktionieren. Kann mich bitte jemand über die Eigenheiten von diesem bockigen Textfeld aufklären?

    Vielen Dank schon mal im Vorraus für Eure Hilfe.
    Daniel
     

  2. #2
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Möchtest du das wirklich mit connect() machen? Benutzt auch den Qt Creator oder nur die libs?
    Wie sieht der Code aus?

    Hast du es schon mal mit QString s = ui->TextEdit->text(); versucht?

    cwriter
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  3. #3
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Soweit ich das sehe gibt es kein textChanged(QString) Signal bei QTextEdit. Hast du das evtl. mit QLineEdit verwechselt?

    Erhältst du denn keine Warnung auf der Konsole?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #4
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo pYroman1ac,

    das textChanged()-Signal bei QTextEdit hat keinen Parameter. Du kannst also auf diese Weise nicht den geänderten Text übergeben. sondern musst ihn nach Auslösen des Events noch explizit mit der text()-Methode vom jeweils anderen Textfeld abholen.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  5. #5
    pYroman1ac pYroman1ac ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    11
    Hallöchen nochmal!

    Vielen Dank für eure Antworten! Ich habe mir jetzt eine eigene Klasse mit eigenen Slots geschrieben. Ich möchte euch meine Lösung natürlich nicht vorenthalten! Konstruktive Kritik ist natürlich gerne gesehen!

    TextSynchronizer.h
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #ifndef TEXTSYNCHRONIZER_H
    #define TEXTSYNCHRONIZER_H
     
    #include <QObject>
    #include <QTextEdit>
     
    class TextSynchronizer : public QObject
    {
        Q_OBJECT
        QTextEdit *mainwindow, *secondwindow;
     
    public:
        explicit TextSynchronizer(QObject *parent = 0, QTextEdit *mainwindow = 0, QTextEdit *secondwindow = 0);
     
    public slots:
        void fromAtoB();
        void fromBtoA();
    };
     
    #endif // TEXTSYNCHRONIZER_H

    TextSynchronizer.cpp:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    #include "textsynchronizer.h"
    #include <cassert>
     
    TextSynchronizer::TextSynchronizer(QObject *parent, QTextEdit *mainwindow, QTextEdit *secondwindow ) :
        QObject(parent), mainwindow(mainwindow), secondwindow(secondwindow)
    {
        assert(mainwindow != 0);
        assert(secondwindow != 0);
     
        connect(mainwindow, SIGNAL(textChanged()), this, SLOT(fromAtoB()));
        connect(secondwindow, SIGNAL(textChanged()), this, SLOT(fromBtoA()));
    }
     
    void TextSynchronizer::fromAtoB()
    {
        secondwindow->blockSignals(true);
        secondwindow->setPlainText(mainwindow->toPlainText());
        secondwindow->blockSignals(false);
    }
     
    void TextSynchronizer::fromBtoA()
    {
        mainwindow->blockSignals(true);
        mainwindow->setPlainText(secondwindow->toPlainText());
        mainwindow->blockSignals(false);
    }

    Aufruf in der main:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
        QApplication a(argc, argv);
        MainWindow w;
        SecondWindow x;
     
        QTextEdit *text1 = w.getTextField();
        QTextEdit *text2 = x.getTextField();
        TextSynchronizer tsync(&a, text1, text2);
        QObject::connect(w.getTextField(), SIGNAL(textChanged()), &tsync, SLOT(fromAtoB()));

    Vielleicht kann das ja jemand mal brauchen

    Lg
    Daniel
     

Ähnliche Themen

  1. MySQL - Zwei Beziehungen zwischen zwei Tabellen
    Von suevas im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 21.03.11, 16:18
  2. Sync zwischen sound und movie
    Von svisseroo im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 24.02.09, 09:10
  3. Antworten: 7
    Letzter Beitrag: 13.04.07, 11:25
  4. Antworten: 1
    Letzter Beitrag: 26.05.06, 13:24
  5. Sync. zwischen Outlook auf PC und Notebook
    Von TypischerStudent im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 10.12.03, 18:05