[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
undfield
, um die Daten von der Eingabe-Seite zur Verwertungs-Seite zu bringen. Mit den WidgetsQLineEdit
,QRadioButton
undQCheckBox
klappt dies einwandfrei, mitQTextEdit
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 eine0
zurück.
Kann es nun sein, dassQTextEdit
mitregisterField
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!