[gelöst]Einfach nur zu blöd für C++ oder doch ein Qt problem

Alles rund um die Programmierung mit Qt
Antworten
Oekel
Beiträge: 7
Registriert: 23. Dezember 2008 00:57
Kontaktdaten:

[gelöst]Einfach nur zu blöd für C++ oder doch ein Qt problem

Beitrag von Oekel »

Hi, bitte erschießt mich nicht, wenn es etwas total triviales ist, aber ich hab momentan total ein Brett vorm Kopf und hoffe ihr könnt es mir schnell wegnehmen.

Also ich habe keine Compilerfehler, sondern das Programm stürzt einfach ab, wenn es in die Methode

Code: Alles auswählen

void PowerControlQt::sendToSwitch(SwitchingState onoff, int value)
wechselt.
Dabei läuft der Befehl doch auch im Konstruktor ohne Probleme durch.
Was ist an diesem tcpSocket anders?

Hier schnell der Code:

Code: Alles auswählen

#include <QtGui>
#include <QtNetwork>

#include "PowerControlQt.h"
#include "ControlWidget.h"

int read_ret = 0;
size_t read_syze = 0;
FILE * input = NULL;
size_t buf_in_syze = 512;
int flags = 0;
char buf[512];
char buf_in[512];

PowerControlQt::PowerControlQt(QWidget *parent) :
    QDialog(parent)
    {
    ui.setupUi(this);
    QHBoxLayout *mainLayout = new QHBoxLayout();
    for (int i = 1; i <= 3; i++)
	{
	ControlWidget *poti = new ControlWidget(this, i);
	QString portText = QString("Port");
	portText.operator +=(i);
	poti->ui.outletName->setText(QString("Port ") + QString::number(i));
	poti->connect(poti->ui.checkBox, SIGNAL(stateChanged(int)), poti, SLOT(addressSwitch(int)));
	mainLayout->addWidget(poti);
	}
    setLayout(mainLayout);

    memset(buf, 0, 512);
    memset(buf_in, 0, 512);
    establishConnection();
    }

void PowerControlQt::establishConnection()
    {
    tcpSocket = new QTcpSocket(this);
    tcpSocket->connectToHost("192.168.0.90", 23);
    if (tcpSocket->waitForConnected(5000) == false)
	{
	printf("Failed to connect\n");
	}
    tcpSocket->write(QByteArray("1 \r\n"));
    tcpSocket->flush();
    }
void PowerControlQt::destroyConnection()
    {
    tcpSocket->close();
    }
void PowerControlQt::sendToSwitch(SwitchingState onoff, int value)
    {
//        if (tcpSocket->state() == QAbstractSocket::ConnectedState)
//    	establishConnection();
    ////    else
    //	printf("Verbindung ist noch da!");
    //    if (onoff == PowerControlQt::ON)
    //	;
    //    tcpSocket->write(QByteArray("ON 5 \r\n"));
    //    else
    	tcpSocket->write(QByteArray("OFF 5 \r\n"));

        tcpSocket->flush();
    //	tcpSocket->write(QByteArray("y \r\n"));
    //	tcpSocket->flush();
    //	}
    }

PowerControlQt::~PowerControlQt()
    {
    destroyConnection();
    }

Und noch schnell die Headerdatei:

Code: Alles auswählen

#ifndef POWERCONTROLQT_H
#define POWERCONTROLQT_H

#include <QtGui/QDialog>
#include <QTcpSocket>
#include "ui_powercontrolqt.h"

class PowerControlQt: public QDialog
    {
Q_OBJECT

public:
    PowerControlQt(QWidget *parent = 0);
    ~PowerControlQt();
    enum SwitchingState
	{
	OFF,
	ON
	};
    void establishConnection();
    void destroyConnection();
    void sendToSwitch(SwitchingState state, int value);

private:
    Ui::PowerControlQtClass ui;
    QTcpSocket *tcpSocket;
    };

#endif // POWERCONTROLQT_H
Ihr habt da bestimmt ein Auge für, oder?
Danke
Zuletzt geändert von Oekel am 29. Dezember 2008 13:22, insgesamt 1-mal geändert.
Feel free to help everyone, even me;)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Was meint den dein Debugger dazu?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wahrscheinlich ist dein Pointer nicht in Ordnung. Prüf doch, bevor du drauf zugreifst. (Muss das denn wirklich ein Pointer sein?)

Außerdem täts für SwitchingState eine normaler bool auch ;)

Grüße
Franz
Oekel
Beiträge: 7
Registriert: 23. Dezember 2008 00:57
Kontaktdaten:

leider nein

Beitrag von Oekel »

so, leider kann ich euch nicht sagen, was der Debugger meint, da mein Eclipse beim drücken des Debug Knopfes etwas von "can not run dgb" faselt.

Nun habe ich das tcpPort Objekt ohne Pointer gemacht und es k**** immer noch ab.

Falls es keinen stört hänge ich mal das ganze Projekt an, ist ziemlich klein...
Dateianhänge
PowerControlQt.7z
(8.15 KiB) 177-mal heruntergeladen
Feel free to help everyone, even me;)
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Zwei mal den selben Default Constructor zu implementieren ist keine gute Idee, wie der Compiler dir eigentlich schon als Warnung mitteilen sollte.
Und

Code: Alles auswählen

ControlWidget::ControlWidget(QWidget *parent, int nb)
{
	outletNumber = nb;
	parent = (PowerControlQt*) parent;
	ui.setupUi(this);
}
dürfte das Problem sein.
Was denkst Du passiert bei

Code: Alles auswählen

parent = (PowerControlQt*) parent;
?
Da die lokale Variable genauso heißt wie die Membervariable dürfte in diesem Fall nichts passieren. Entweder du setzt noch ein this-> vor das erste Parent oder du benennst Deine globalen Membervariablen etwas eindeutiger wie z.B. m_parent. Das erleichtert einem im allgemeinen die Übersicht spätestens wenn du mal mehr Variablen verwendest.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Oekel
Beiträge: 7
Registriert: 23. Dezember 2008 00:57
Kontaktdaten:

Ich Idiot-->Gelöst

Beitrag von Oekel »

Danke, klar war es das!! :oops:

Nur seltsam, dass es teilweise funktioniert hat, wenn ich alles in

Code: Alles auswählen

void PowerControlQt::sendToSwitch(SwitchingState onoff, int value)
auskommentiert hatte.
Feel free to help everyone, even me;)
Antworten