[Qt/C++] QTextEdit 'kompatibel' mit regsiterField?



  • Hallo @ all!

    Ich habe da ein kleines Problem. Und zwar möchte ich mit Qt und C++ einen Wizard schreiben, der bestimmte Daten des Benutzers abfragt und diese dann verschlüsselt. Ich arbeit mit QWizard, falls man dies braucht. Ich habe bereits alle Pages erstellt und die ganzen Textfelder etc. eingefügt. Nun bin ich langsam am Ende, und zwar muss ich die ganzen Daten des Benutzers bearbeiten. Ich verwende dazu die Funktionen registerField und field , um die Daten von der Eingabe-Seite zur Verwertungs-Seite zu bringen. Mit den Widgets QLineEdit , QRadioButton und QCheckBox klappt dies einwandfrei, mit QTextEdit klappt es null. Die Daten werden nicht gespeichert. Zur Überprüfung habe ich dann in der letzten Seite den Typ des Fields abgefragt und ich bekam eine 0 zurück.
    Kann es nun sein, dass QTextEdit mit registerField nicht 'kompatibel' ist? Wie kann ich dann den Inhalt des QTextEdit-Elements abfragen?

    Vielen Dank im Voraus!
    mfg Paul



  • Zeig doch mal bitte den Code, wie du das mittels registerField() und dem TextEdit machst.
    Ich denke hier ist dein Problem (aus der Doku zu registerField):

    QWizard knows the most common Qt widgets.
    For these (or their subclasses), you don't need to specify a property
    or a changedSignal. The table below lists these widgets:
    
    Widget	Property	Change Notification Signal
    QAbstractButton	bool checked	toggled()
    QAbstractSlider	int value	valueChanged()
    QComboBox	int currentIndex	currentIndexChanged()
    QDateTimeEdit	QDateTime dateTime	dateTimeChanged()
    QLineEdit	QString text	textChanged()
    QListWidget	int currentRow	currentRowChanged()
    QSpinBox	int value	valueChanged()
    You can use QWizard::setDefaultProperty() to add entries to this table or to override existing entries.
    

    Da steht kein TextEdit, drum hast du sicher genau hier einen Fehler.
    Also poste Code, dann gehts weiter 😉



  • Ok! Hier ist der Code-Ausschnitt:

    Wizard.cpp

    #include <QtGui>
    #include "Wizard.h"
    
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    // wizard
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    Wizard::Wizard(QWidget* qParent)
    	: QWizard(qParent)
    {
    	// set title of wizard
    	setWindowTitle("Test-Wizard");
    
    	// add pages
    	addPage(new ClassIntroPage);
    	addPage(new ClassEndPage);
    }
    
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    // intropage
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    ClassIntroPage::ClassIntroPage(QWidget* qParent)
    	: QWizardPage(qParent)
    {
    	// set title of page
    	setTitle("Startseite");
    
    	// set label of page
    	qLabel = new QLabel("Dies ist ein Test-Wizard. Er wurde mit C++ und Qt entwickelt! Bitte geben Sie etwas Text ein und klicken Sie auf \"Weiter\".");
    	qLabel->setWordWrap(true);
    
    	// set text edit
    	qText = new QTextEdit;
    
    	// register fields
    	registerField("IntroText",qText);
    
    	// set layout of page
    	QVBoxLayout* qLayout = new QVBoxLayout;
    	qLayout->addWidget(qLabel);
    	qLayout->addWidget(qText);
    	setLayout(qLayout);
    }
    
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    // endpage
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    ClassEndPage::ClassEndPage(QWidget* qParent)
    	: QWizardPage(qParent)
    {
    	// set title of page
    	setTitle("Letzte Seite");
    
    	// set label of page
    	qLabel = new QLabel("Dies ist die letzte Seite des Wizards!");
    	qLabel->setWordWrap(true);
    
    	// set box of intro text
    	qIntroText = new QTextEdit;
    	qIntroText->setReadOnly(true);
    
    	// set layout of page
    	QVBoxLayout* qLayout = new QVBoxLayout;
    	qLayout->addWidget(qLabel);
    	qLayout->addWidget(qIntroText);
    	setLayout(qLayout);
    }
    
    void ClassEndPage::initializePage()
    {
    	qIntroText->setText(field("IntroText").toString());
    }
    

    Wizard.h

    #ifndef _CIPHERWIZARD_H_
    #define _CIPHERWIZARD_H_
    
    #include <QWizard>
    
    QT_BEGIN_NAMESPACE
    class QLabel;
    class QTextEdit;
    QT_END_NAMESPACE
    
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    // wizard
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    class Wizard : public QWizard
    {
    public:
    
    	Wizard(QWidget* qParent = 0);
    };
    
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    // intropage
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    class ClassIntroPage : public QWizardPage
    {
    private:
    
    	QLabel* qLabel;
    	QTextEdit* qText;
    
    public:
    
    	ClassIntroPage(QWidget* qParent = 0);
    };
    
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    // endpage
    ///////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////
    class ClassEndPage : public QWizardPage
    {
    private:
    
    	QLabel* qLabel;
    	QTextEdit* qIntroText;
    
    public:
    
    	ClassEndPage(QWidget* qParent = 0);
    
    	void initializePage();
    };
    
    #endif // _CIPHERWIZARD_H_
    

    Main.cpp

    #include <QApplication>
    #include <QTranslator>
    #include <QLocale>
    #include <QLibraryInfo>
    #include "Wizard.h"
    
    int main(int argc,char *argv[])
    {
    	QApplication qApplication(argc,argv);
    
    	QString translatorFileName = QLatin1String("qt_de_DE");
    	QTranslator *translator = new QTranslator(&qApplication);
    	if (translator->load(translatorFileName,QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
    	{
    		qApplication.installTranslator(translator);
    	}
    
    	Wizard qWizard;
    	qWizard.show();
    
    	return qApplication.exec();
    }
    


  • Genau wie ich gedacht habe, und mit dem Ausschnitt aus der Doku, den ich oben gepostet habe hättest du die Lösung eigentlich selber finden müssen...

    Statt

    registerField("IntroText",qText);
    

    das hier

    registerField("IntroText", qText, "plainText", "textChanged");
    

    Grüßle



  • Vielen Dank!
    Es hat einwandfrei funktioniert!


Anmelden zum Antworten