Seite 1 von 1

aus main.cpp auf funktion in xxx.ui.h zugreifen

Verfasst: 8. August 2005 21:24
von atlantex
Hallo,

bin ganz neu im Umgang mit QT, ebenso wie in diesem Forum und gleich zu Beginn habe ich eine Frage die so trivial erscheint das ich mich kaum traue zu fragen, aber egal.
Ich benutze QT3 unter Fedora Core 4.

Also, ich möchte an meiner Garage eine Lichtschranke anbringen die bei Unterbrechung ein Signal an die Parallele Schnittstelle liefert und damit ein Signal ausgelöst wird.

Ich bin nun soweit das ich die Lichtschranke "scharf schalten" kann, ebenso wird ein LPT-Pin alle 500 ms belauscht ob ein Signal anliegt, die Weitergabe an einen Signalgeber (im Test eine LED) funktioniert auch. Also techn. gesehen ist der Code funkionsbereit.

Nun zum Problem:

ich habe mir eine kleine Oberfläche "zusammengeklickt" auf der 2 Buttons sind und eine Kontrolllampe (ein Bild dient als Kontrolllampe), mit den Buttons kann ich die Lichtschranke aktivieren und deaktivieren, die Kontrolllampe zeigt den aktuellen Status an, mittels setEnabled (true) bzw. setDisabled(true).

so weit so gut.

Nun habe ich einen Timer, der sitzt in der main.cpp, dieser prüft alle 500 ms einen Pin auf Spannung, liegt sie an so schaltet er einen anderen Pin an, an dem der Signalgeber hängt, geht auch noch soweit.

Nun möchte ich in der Oberfläche noch eine Kontrolllampe einsetzen, diese soll leuchten sobald der Signalgeberpin aktiv ist, nur als optische Kontrolle.

Mein Problem ist nun dass ich die Verbindung einfach nicht auf die Reihe bekomme, also ich habe in der Oberfläche ein zusätzliches Bild eingefügt, das standardmässig auf disabled gesetz istt und möchte das es bei bedarf auf enabled wechselt.

hier mal ein paar Codeschnipsel:

xxx.ui.h

Code: Alles auswählen


void look::controll_led_on()

{
   controll_led->setEnabled( true );
}


void look::controll_led_off()

{
   controll_led->setDisabled( true );
}



main.cpp

Code: Alles auswählen


	if (pin_is_set(LP_PIN11))		//check the satus of pin 11

    {
    clear_pin(LP_PIN02);
     look *w = new look();
    w->controll_led_off()
    }
else
    {
    set_pin(LP_PIN02);
    look *w = new look();
    w->controll_led_on()
}


wenn ich im Formteil in die on / off Funktionen jeweils ein printf mit reinsetze und das Proggi via Commandozeile starte sehe ich das die Funktionen ausgeführt werden, nach dem stoppen sehe ich eine 0 oder 1, je nach Schaltzustand, also er greift von der main.cpp schonmal in die xxx.ui.h rüber, jedoch enabled bzw. disabled er mir das LED Bild einfach nicht.

so, hoffe mal das is einigermassen fassbar was ich hier versuche zu beschreiben :oops:

wäre nett wenn jemand einen Tip geben kann, sollte dieses Thema schon mal behandelt worden sein, einfach drauf hinweisen, dann such ich es raus, 2 Tage googlen half mir einfach nicht weiter.

Danke

atlantex

Verfasst: 8. August 2005 23:37
von lepsai
also das war viel Text, aber das Problem habe ich am Ende doch nicht verstanden. Irgend welche Lampen, ein und aus, aber kannste das nicht irgend wie abstrakter beschreiben.
Wenn ich's aber doch richtig verstanden habe, dann mach:

Code: Alles auswählen

  if (pin_is_set(LP_PIN11))      //check the satus of pin 11 
 { 
    clear_pin(LP_PIN02); 
     look *w = new look(); 
    w->controll_led_off();
    } 
   else 
    { 
    set_pin(LP_PIN02); 
    look *w = new look(); 
    w->controll_led_on();
}
qApp->processEvents();

Verfasst: 9. August 2005 06:19
von atlantex
Guten Morgen,

also dann mal ganz kurz :)

Im Formular habe ich ein Bild das ich eanblen bzw. desablen möchte,
das soll aus der main.cpp heraus in Abhängigkeit einer if-Abfrage umgeschaltet werden.

Was nicht richtig klappt ist die Verbindung von der main.cpp zum Bild im Form, oder dessen Aufruf, das Bild wird einfach nicht enabled oder disabled.

Fehler beim kompilieren kommen keine, möglicherweise fehlt nur was kleines.

Aso, ein Ansprechen der Funktionen im Formular sebst bzw. in der xxx.ui.h klappt wieder, aber eben nicht aus der main.cpp heraus.


thx

atlantex

Verfasst: 9. August 2005 10:20
von lepsai
Haste mit qApp->processEvents() probiert?

Verfasst: 9. August 2005 11:00
von atlantex
Hallo lepsai,

kann ich erst am Nachmittag probieren, ich geb dann bescheid.



atlantex

Verfasst: 9. August 2005 15:39
von atlantex
Hallo lepsai,

hab mal die qApp->processEvents() Sache probiert, leider ohne Erfolg, aber auch keine Fehler.

Ich habe noch etwas in anderen Foren gesucht, sieht so aus als würde mir da einiges fehlen...

Hier mal der komplette Code, wie es soweit läuft:


xxx.ui.h

Code: Alles auswählen


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <parapin.h>
#include <qlabel.h>


void look::led_on_slot()
{
if (pin_init_user(LPT1) < 0)
  exit(0);

  pin_output_mode(LP_PIN03);
  
  set_pin(LP_PIN03);
  //look::foerder_on_led();
}


void look::led_off_slot()
{
if (pin_init_user(LPT1) < 0)
  exit(0);
  pin_output_mode(LP_PIN03);

  clear_pin(LP_PIN03);
 //look::foerder_off_led();
}



void look::foerder_on_led()
{
    foerder_led->setEnabled( true );
    printf("1");
}


void look::foerder_off_led()
{
    foerder_led->setDisabled( true );
    printf("0");
}


main.cpp

Code: Alles auswählen


#include <qapplication.h>
#include <qtimer.h>
#include <qmessagebox.h>
#include "look.h"
#include <parapin.h>


class Lichtschranke : public QWidget{
	Q_OBJECT
    
public:
	Lichtschranke(QWidget *parent=0, const char *name=0)
	{
		QTimer *zeit=new QTimer(this);
		QObject::connect(zeit, SIGNAL(timeout()), SLOT(zeigeZeit()));
		zeit->start(500, false);
		zeigeZeit();
	}
	
private slots:
	void zeigeZeit()
	{
	if (pin_init_user(LPT1) < 0)
		exit(0);				//exit if you are NOT root !!
		
		pin_input_mode(LP_PIN11);		//set pin 11 to INPUT mode
		pin_output_mode(LP_PIN02);
	   
		if (pin_is_set(LP_PIN11))		//check the satus of pin 11
    {
    clear_pin(LP_PIN02);
    look *w = new look();
    w->foerder_off_led();
    }
else
    {
    set_pin(LP_PIN02);
    look *w = new look();
    w->foerder_on_led();
} 
//qApp->processEvents();
		
}
};






#include "licht.moc"		//needet by Q_OBJECT


int second()			
{
    Lichtschranke *lichtschr=new Lichtschranke;
}


int main( int argc, char *argv[] )
{
    QApplication a( argc, argv );
     look *w = new look();
     w->show();
//    look w;
//    w.show();
//    w->foerder_on_led();
    second();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}


Auf dem Form befindet sich jetzt ein Bild das enabled oder disabled werden soll.



Grüsse

atlantex

Verfasst: 10. August 2005 11:33
von atlantex
Hallo,


hab nochmal einiges gelesen aber ich bekomm es einfach nicht hin :-(




atlantex