Seite 1 von 2

problem mit nen LineEdit

Verfasst: 28. Dezember 2006 18:55
von chrisgl
hi
hab mit http://mm-werkstatt.informatik.uni-augs ... qt2005.pdf
ne oberfläche erstellt. dann habe ich diese verändert und nen pushbutton und nen lineEdit hinzugefügt.
Das mit den slots und signal geht beim puschbutton doch ich komme nicht weiter wie ich aus den txt feld den wert in eine variable bekomme irgendwie mit der text() aber ka wie weil er immer nur fehler ausgibt selbst wenn ich das einfach nur noch mal ausgeben will.
hier kurz die slots:

Code: Alles auswählen

	connect(m_startButton, SIGNAL(clicked()), this, SLOT(startPushed()));
	  connect(m_in_lineEdit, SIGNAL(editingFinished()), this, SLOT(anzeiger()));
hier die methoden:

Code: Alles auswählen

void MainWindow::startPushed()
{
	QMessageBox::information(this, tr("MainWindow Message"), tr("Hello World!"));
	
}
void MainWindow::anzeiger()
{	
	cout << "ausgabe: " << m_in_lineEdit.text();
}

das steht so in der MainWindow.cpp halt so angeleht an dem Tutorial oben. Wollte davon ausgehen und dann langsam mich vortasten aber irgendwie klappt das halt nicht.
habt ihr ne idee wie ich da den text rausbekomme. naja und nachher wie in in ein anderes textfeld rein das ich schon soweit definiert habe.

Verfasst: 28. Dezember 2006 20:30
von uhu01
Hy!

Sind die beiden Methoden denn als Slots definiert?

Ansonsten wäre es nett wenn du etwas mehr Code posten könntest, ohne den wird es schwer sein den Fehler zu finden...

mfg
uhu01

PS: Etwas Groß/Kleinschreibung etc. wäre nett...

Verfasst: 28. Dezember 2006 21:10
von chrisgl
:D das soll nicht das Problem sein
als erstes die MainWindow.h

Code: Alles auswählen

// to avoid multiple class definitions by including this file more than once
// we have to surround the class definition by this compiler flag
#ifndef MAINWINDOW_H_
#define MAINWINDOW_H_
#include "ui_wavLesen.h"
#include <string>

/**
* Sample MainWindow Class
* The class is a simple implementation of a QDesigner created form file
* defining a simple QMainWindow application
* The class inherits from QMainWindow and Ui_MainWindow. The Ui_MainWindow
* provides the QDesigner part of the implementation, while the QMainWindow
* provides the main functions of a QT Application
*/
//class MainWindow : public QMainWindow, protected Ui_MainWindow

class MainWindow : public QMainWindow, protected Ui_wavLesen
{
	Q_OBJECT
public:
	/**
	* Constructor of the MainWindow class
	* @param parent this optional parameter defines a parent widget the created instance will be child of
	* @param flags optional parameter defining extra widget options (see also the QT documentation)
	*/
	MainWindow(QWidget* parent = 0, Qt::WindowFlags flags = 0);
	/**
	Destructor of the MainWindow class, defined virtual to guarantee that
	the destructor will be called even if the instance of this class is
	saved in a variable of a parent class type
	*/
	virtual ~MainWindow();

	protected slots:
		void startPushed();
		void anzeiger();
};
#endif // end of #ifndef MAINWINDOW_H_
dann die MainWindow.cpp

Code: Alles auswählen

#include "MainWindow.h"
#include <qt/qmessagebox.h>
#include <iostream>

Ui_wavLesen uiWL;

QString was;

using namespace std;


MainWindow::MainWindow(QWidget* parent /* = 0 */, 
					   Qt::WindowFlags flags /* = 0 */)
	: QMainWindow(parent, flags)
{
	// create gui elements defined in the Ui_MainWindow class
	setupUi(this);
	connect(m_startButton, SIGNAL(clicked()), this, SLOT(startPushed()));
	  // toggled(bool) // clicked() // clicked(bool) // released() // pressed()
	//... SIGNAL(valueChanged(int)), SLOT(meinSlot(int)) ...
	connect(m_in_lineEdit, SIGNAL(editingFinished()), this, SLOT(anzeiger()));
}
MainWindow::~MainWindow()
{
	// no need to delete child widgets, QT does it all for us
}

void MainWindow::startPushed()
{
	QMessageBox::information(this, tr("MainWindow Message"), tr("Hello World!"));
	
}
void MainWindow::anzeiger()
{	
	uiWL.getInLineEdit();
	cout << "ausgabe: ";
}
und als letztes das Problemkind die ui_wavLesen.h

Code: Alles auswählen

/********************************************************************************
** Form generated from reading ui file 'wavLesen.ui'
**
** Created: Thu 28. Dec 14:59:17 2006
**      by: Qt User Interface Compiler version 4.2.2
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef UI_WAVLESEN_H
#define UI_WAVLESEN_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QLineEdit>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>
#include <iostream>

using namespace std;

class Ui_wavLesen
{
public:
    QAction *m_actionBeenden;
    QWidget *centralwidget;
    QWidget *verticalLayout;
    QVBoxLayout *vboxLayout;
    QVBoxLayout *vboxLayout1;
    QLineEdit *m_in_lineEdit;
    QPushButton *m_startButton;
    QLineEdit *m_out_lineEdit;
    QVBoxLayout *vboxLayout2;
    QMenuBar *menubar;
    QMenu *menu_Datei;
    QStatusBar *statusbar;
    
    void Ui_wavLesen::getInLineEdit();

    void setupUi(QMainWindow *wavLesen)
    {
    wavLesen->setObjectName(QString::fromUtf8("wavLesen"));
    wavLesen->setContextMenuPolicy(Qt::NoContextMenu);
    m_actionBeenden = new QAction(wavLesen);
    m_actionBeenden->setObjectName(QString::fromUtf8("m_actionBeenden"));
    centralwidget = new QWidget(wavLesen);
    centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
    QSizePolicy sizePolicy(static_cast<QSizePolicy::Policy>(5), static_cast<QSizePolicy::Policy>(5));
    sizePolicy.setHorizontalStretch(0);
    sizePolicy.setVerticalStretch(0);
    sizePolicy.setHeightForWidth(centralwidget->sizePolicy().hasHeightForWidth());
    centralwidget->setSizePolicy(sizePolicy);
    verticalLayout = new QWidget(centralwidget);
    verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
    verticalLayout->setGeometry(QRect(0, 0, 211, 251));
    vboxLayout = new QVBoxLayout(verticalLayout);
    vboxLayout->setSpacing(6);
    vboxLayout->setMargin(0);
    vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
    vboxLayout1 = new QVBoxLayout();
    vboxLayout1->setSpacing(6);
    vboxLayout1->setMargin(0);
    vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));

    vboxLayout->addLayout(vboxLayout1);

    m_in_lineEdit = new QLineEdit(verticalLayout);
    m_in_lineEdit->setObjectName(QString::fromUtf8("m_in_lineEdit"));

    vboxLayout->addWidget(m_in_lineEdit);
    
    m_startButton = new QPushButton(verticalLayout);
    m_startButton->setObjectName(QString::fromUtf8("m_startButton"));

    vboxLayout->addWidget(m_startButton);

    m_out_lineEdit = new QLineEdit(verticalLayout);
    m_out_lineEdit->setObjectName(QString::fromUtf8("m_out_lineEdit"));

    vboxLayout->addWidget(m_out_lineEdit);

    vboxLayout2 = new QVBoxLayout();
    vboxLayout2->setSpacing(6);
    vboxLayout2->setMargin(0);
    vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));

    vboxLayout->addLayout(vboxLayout2);

    wavLesen->setCentralWidget(centralwidget);
    menubar = new QMenuBar(wavLesen);
    menubar->setObjectName(QString::fromUtf8("menubar"));
    menubar->setGeometry(QRect(0, 0, 210, 19));
    menu_Datei = new QMenu(menubar);
    menu_Datei->setObjectName(QString::fromUtf8("menu_Datei"));
    wavLesen->setMenuBar(menubar);
    statusbar = new QStatusBar(wavLesen);
    statusbar->setObjectName(QString::fromUtf8("statusbar"));
    wavLesen->setStatusBar(statusbar);

    menubar->addAction(menu_Datei->menuAction());
    menu_Datei->addAction(m_actionBeenden);

    retranslateUi(wavLesen);

    QSize size(210, 280);
    size = size.expandedTo(wavLesen->minimumSizeHint());
    wavLesen->resize(size);

    QObject::connect(m_actionBeenden, SIGNAL(triggered()), wavLesen, SLOT(close()));

    QMetaObject::connectSlotsByName(wavLesen);
    } // setupUi

    void retranslateUi(QMainWindow *wavLesen)
    {
    wavLesen->setWindowTitle(QApplication::translate("wavLesen", "wavLesen", 0, QApplication::UnicodeUTF8));
    m_actionBeenden->setText(QApplication::translate("wavLesen", "&Beenden", 0, QApplication::UnicodeUTF8));
    m_startButton->setText(QApplication::translate("wavLesen", "Start", 0, QApplication::UnicodeUTF8));
    menu_Datei->setTitle(QApplication::translate("wavLesen", "&Datei", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

inline void Ui_wavLesen::getInLineEdit()
    {
    	cout << "bin hier";
    }

namespace Ui {
    class wavLesen: public Ui_wavLesen {};
} // namespace Ui

#endif // UI_WAVLESEN_H
wie ihr seht schreibe ich unten ne kleine get Methode naja mal sehen ob das was wird. Wenn ihr besseren weg wisst wäre ich froh. Bzw. wenn ihr zu der get spart nicht mit Kritik. Irgendwie muss ich doch m_in_lineEdit als Variable in die MainWindow.cpp bekommen.

Sry das ich soooooviel Code nun mitgeschickt habe... hoffe das hilft etwas...

Verfasst: 28. Dezember 2006 21:52
von upsala
Und das ganze compiliert bei dir Fehlerfrei?

Deine Rechtschreibung ist unter aller...

Verfasst: 29. Dezember 2006 00:36
von chrisgl
:oops: ... es ist spät und habe heute schon lange dran gesessen... jab das kompiliert... wie gesagt mit dem Tutorial von oben MS Visio eingerichtet ...
habe in der Konsolenumgebung schon ein Programm geschrieben nun versuche ich Teile davon mit der Windows UI als Ein/Ausgabe zuerstellen.

Verfasst: 29. Dezember 2006 09:38
von upsala
ui_wavLesen.h:45: error: extra qualification 'Ui_wavLesen::' on member 'getInLineEdit'

Verfasst: 29. Dezember 2006 11:10
von chrisgl
hmmm naja hast die main aus dem Tutorial noch dazu genommen? Und ansonsten habe ich alles so wie es im Tutorial drin steht und es läuft. Der MO'Compiler hat noch ne moc_MainWindow.cpp erzeugt wenn die hast musst die noch im Projekt einbinden.
Bei der MainWindow.h musste ich in den Eigenschaften so wie es im Tutorial drin steht noch was anpassen.
Hier die main.cpp

Code: Alles auswählen

// Header file to get a new instance of QApplication
#include <Qt/qapplication.h>

// Header file for MainWindow class
#include "MainWindow.h"

int main(int argc, char* argv[])
{
	// create a new instance of QApplication with params argc and argv
	QApplication app( argc, argv );

	// create a new instance of MainWindow with no parent widget
	MainWindow* mainWindow = new MainWindow(0, Qt::Window);

	// The main widget is like any other, in most respects except that if it is deleted,
	// the application exits.
	app.setActiveWindow(mainWindow);

	// resize window to 210 x 280
	mainWindow->resize(210,280);
	
	// Shows the widget and its child widgets.
	mainWindow->show();

	// Enters the main event loop and waits until exit() is called
	// or the main widget is destroyed, and returns the value that
	// was set via to exit() (which is 0 if exit() is called via quit()).
	return app.exec();
}

Verfasst: 29. Dezember 2006 12:10
von chrisgl
hab mal probiert das

Code: Alles auswählen

connect(m_in_lineEdit, SIGNAL(editingFinished()), this, SLOT(anzeiger()));
raus zunehmen und jetzt die Methode für das erste connect wie folgt umgeschrieben

Code: Alles auswählen

void MainWindow::startPushed()
{
	QMessageBox::information(this, tr("MainWindow Message"), tr("Hello World!"));
	cout << uiWL.m_in_lineEdit->text().toStdString();
}
jetzt kann er es zwar kompilieren aber ich bekomme immer den Debugger mit einene Ausnahmefehler zusehen wenn ich den PushButton betätige. Von Java kenne ich das wenn da irgendwas mit einer Übergabe nicht stimmt. Also er wartet auf ein int und bekommt aber einen String par example.
Also kann es sein das uiWL.m_in_lineEdit->text().toStdString() irgendwas unerwartetes zurückgibt?

Verfasst: 29. Dezember 2006 12:49
von upsala
Ersetz mal cout durch qDebug(). Bei cout tauchen bei mir komischerweise keine Ausgaben auf. Aber ich verwende es selbst auch nie...

Verfasst: 29. Dezember 2006 13:30
von chrisgl
hmmm
Zeile sieht jetzt so aus:
qDebug() << uiWL.m_in_lineEdit->text().toStdString();
aber das gibt nur Fehler.
Selbst qDebug(uiWL.m_in_lineEdit->text()); gibt nur nen Fehler wieder:

Code: Alles auswählen

mainwindow.cpp(32) : error C2665: "qDebug": Durch keine der 2 Überladungen konnten alle Argumenttypen konvertiert werden.
        c:\qt\4.2.2\src\corelib\global\qglobal.h(1201): kann 'void qDebug(const char *,...)' sein bei Anpassung der Argumentliste '(QString)
Hilfe ... grübel aber in der Doku steht doch

Code: Alles auswählen

void qDebug ( const char * msg, ... )
und LineEdit ist doch

Code: Alles auswählen

QLineEdit *m_in_lineEdit;

Verfasst: 29. Dezember 2006 14:07
von upsala
qDebug() << uiWL.m_in_lineEdit->text();

Verfasst: 30. Dezember 2006 11:16
von chrisgl
Hmm braucht man dafür nen speziellen Header? Weil ich bekomme da so einen Fehler:
error C2678: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'QDebug' akzeptiert (oder keine geeignete Konvertierung möglich)

Verfasst: 30. Dezember 2006 13:28
von uhu01
Hy!

Ja:

Code: Alles auswählen

#include <QtDebug>
mfg
uhu01

Verfasst: 31. Dezember 2006 14:03
von chrisgl
hmmmm mist
der kompiliert zwar den Code aber er stürzt dan ab wenn er an der Stelle ist und die ausgabe macht
Die Funktion in der MainWindow.cpp:

Code: Alles auswählen

void MainWindow::startPushed()
{
	QMessageBox::information(this, tr("MainWindow Message"), tr("Hello World!"));
	qDebug() << uiWL.m_in_lineEdit->text();
}
Wieso?

Verfasst: 31. Dezember 2006 14:41
von Der Neue
Derartige Abstürze hatte ich bis jetzt nur, als ich vergessen habe vorher setupUi(this) im Konstruktor des Hauptfensters aufzurufen. Aber das ist bei dir ja nicht der Fall...