[solved] SLOTS anderer Klassen nutzen

Alles rund um die Programmierung mit Qt
daniel_23
Beiträge: 46
Registriert: 15. Mai 2006 18:53
Wohnort: Oldenburg
Kontaktdaten:

Beitrag von daniel_23 »

Achso, hmm mal sehn, ich bin jetz auch zu muede noch was zu aendern.
Ich schau mir das mal morgn an, "make install" Moeglichkeit moecht ich schon gern erhalten, ich poste mal morgn Abend ein kleines Bugfix.
Ich geh jetz auch mal off
daniel_23
Beiträge: 46
Registriert: 15. Mai 2006 18:53
Wohnort: Oldenburg
Kontaktdaten:

Beitrag von daniel_23 »

Wie mach ich das denn genau mit auf Versionsnummer ueberpruefen?
Ich wuerd gern falls ne zu alte QT Version benutzt wird nen Error ausgeben und qmake beenden.
HIer mal das was ich rumprobiert hab:

Code: Alles auswählen

	#Check QT Version
	QT_VERS = $$[QT_VERSION]
	QT_VERS_CHECK = $$find(QT_VERS, 5.[0-9].[0-9])
	isEmpty( QT_VERS_CHECK ) {
		message(Qt version: $$QT_VERS)
		error("QT >= 4.0 is required!")
	}
Funktioniert beides leider nich, ich hab kein Beispiel fuer sowas gefunden, macht qmake das automatisch?

EDID:
So das hab ich schonmal geschafft:

Code: Alles auswählen

	#Check QT Version
	TEST = $$find(QT_VERS, 4.[0-9].[0-9])
	isEmpty( TEST ) {
		message(Qt version: $$QT_VERS)
		error("QT >= 4.0 is required!")
	}
Auzerdem wuerde ich noch gern die existenz von den system Befehlen pruefen, aber mit:

Code: Alles auswählen

	!exists( /usr/bin/ping ) {
			error( "No ping command found" )
		}
hats auch nich geklappt

EDID:
Auch noch hingekriegt, der path war falsch :oops:

Code: Alles auswählen

	#Check for Dependencies
	LIST = /bin/ping  /usr/bin/nmap /usr/bin/whois kscanmain.cpp
	for(a, LIST): {
		!exists($${a}) {
			error("$$a is required!")
		}
	}
Gibs irgendne moeglichkeit envirement Variablen einzubauen? Falls jemand das woanders hat.
naja mit $$( PATH ) funktioniert es, da sind bloz nen haufen : : : : die muessten in leerzeilen umgewandelt werden.
Und ist die Struktur unter mac die selbe?
Fehler:
/usr/include/qt4/QtCore/qfile.h:164: error: 'QFile::QFile(const QFile&)' is private
Es ist so, dass du den gleichen Namen für die Datei gewählt hast, wie du QFile nennst.
Falls noch etwas kommt, sage ich Bescheid.
Bei mir kommt kein solcher Error. Ich kann auch irgendwie nich nachvollziehn was du mit "gleichen Namen für die Datei gewählt hast, wie du QFile nennst" meinst. Der Dateiname ist meist ".kscanrc" und das is nich als variable definiert. Steht da noch irgendne Zeilennummer von den .cpp Dateien?
daniel_23
Beiträge: 46
Registriert: 15. Mai 2006 18:53
Wohnort: Oldenburg
Kontaktdaten:

Beitrag von daniel_23 »

So hab jetz mal ne neue Version hochgeladen, das mit dem pro file und der zeit muesste jetz ok sein :-)
http://orgizm.net/~daniel/downloads/dev ... .2.tar.bz2
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

der pfad von ping , whois nmap , etheral , host, dig ... ecc
zu bekommen solte laut doku so gehen.....

da "which" auch auf mac installiert ist ... nicht nur auf linux...

QString pfad = GrabWhich("ping");

if (pfad.size() > 0) {
aktiv ....
} else {
deaktivieren....
}


Code: Alles auswählen

QString classname::GrabWhich(QString appname)
{
QString result = "";
QProcess *p = new QProcess(this);
p->setReadChannelMode(QProcess::MergedChannels); 
p->start("which" , QStringList() << appname);
    
     if (!p->waitForStarted()) {
      return result;  /* error string.size() <=> */
     } else if (!p->waitForFinished()) {
      return result;  /* error string.size() <=> */
     }   else {
     result = process.readAll();
     }
return result;  /* error string.size() <=> */
}  
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Also Ping wirst ja wohl mit Qt selber schreiben können, oder? Vor allem bleibt es dadurch nicht wirklich Cross-Plattform.

Ist es machbar, dass du diese kleineren Helferlein direkt in Qt schreibst?
daniel_23
Beiträge: 46
Registriert: 15. Mai 2006 18:53
Wohnort: Oldenburg
Kontaktdaten:

Beitrag von daniel_23 »

patrik08 hat geschrieben:da "which" auch auf mac installiert ist ... nicht nur auf linux...
QString pfad = GrabWhich("ping");
thx patrick08!
Das werd ich mal demnaechst einbauen, fuer die QProcesses die ich nich loswerde, nmap ist bestimmt nicht leicht loszuwerden :-)
FlorianBecker hat geschrieben:Also Ping wirst ja wohl mit Qt selber schreiben können, oder? Vor allem bleibt es dadurch nicht wirklich Cross-Plattform.

Ist es machbar, dass du diese kleineren Helferlein direkt in Qt schreibst?
Ich hoffe schon, da das mein erstes qt programm ist wollte ich nich von anfang an so tief in die materie einsteigen. In der todo file steht auch schon "get rid of qprocess".
Einen Ueberblick gemacht, wie ich das machen werde, hab ich noch nich, aber ich werd mir das mal die Tage ansehen!

EDIT:
Fuer das pingen braeuchte ich schonmal suid-root rechte :-(
Weiz jemand wie ich das am besten machen kann?
Am besten so das nich gleich das ganze Programm davon betroffen ist, nur der ping befehl, der in einem externen header gelagert ist
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Du brauchst für das pingen root Rechte? Was hast du denn für ein Linux?
daniel_23
Beiträge: 46
Registriert: 15. Mai 2006 18:53
Wohnort: Oldenburg
Kontaktdaten:

Beitrag von daniel_23 »

http://lists.trolltech.com/qt-interest/ ... 351-0.html
is das einzige was ich auf anhieb dazu gefunden hab
ping ist ein suid-root programm, welches ICMP benutzt, und dafuer brauch man root rechte
Die ping.h funktioniert uebrigens einwandfrei, halt nur als root :-(
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ja, da hast du ja schonmal was. In meinem System ist ping kein SUID-ROOT Programm. Und komischerweise kann ich mich auch an kein Linux erinnern, welches dieses als SUID-ROOT setzt.

Seltsam.
daniel_23
Beiträge: 46
Registriert: 15. Mai 2006 18:53
Wohnort: Oldenburg
Kontaktdaten:

Beitrag von daniel_23 »

Also die ping.h funktioniert nicht als normaler user da wird immer -1 fuer error zurueckgegeben, schon eine der ersten ueberpruefungen schlaegt fehl:

Code: Alles auswählen

  sockRaw = socket ( AF_INET, SOCK_RAW,IPPROTO_ICMP );
  if (sockRaw == INVALID_SOCKET) {
    ping_error("ping(), socket failed."); return -1; }

Code: Alles auswählen

$ ./bin/qscanner
[error]: <ping.h> ping(), socket failed.
Mit dem suid-root hab ich auch nur heute durchs googlen aufgeschnappt, aber scheint ja ne Rechte sache zu sein, jedenfalls bei diesem header
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Macht doch überhaupt keinen Sinn ping das als SUID-ROOT zu haben?

Mh, keine Ahnung, wie man das am Besten lösen sollte. Ich denke allerdings, Qt hat dazu bereits alle nötigen Dinge. Aber erstmal bin ich immer noch von diesem SUID-ROOT ping Mist geschockt. Du wirst diese Problem wohl noch öfters haben.

Wird denn das Programm genau bei diesem Umfang bleiben? Ich würde dir dann wirklich empfehlen dich massiv mit Netzwerken zu befassen, denn du wirst wohl beinahe bei jedem OS eigene Teile schreiben müssen. Unter Snippetes müsst von mir eine Klasse sein, die die NET ID ausließt und den Computernamen. Da könntest du z.B. anknüpfen und die IP und Subnetmask heraus lesen.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

FlorianBecker hat geschrieben:Also Ping wirst ja wohl mit Qt selber schreiben können, oder? Vor allem bleibt es dadurch nicht wirklich Cross-Plattform.
Ist es machbar, dass du diese kleineren Helferlein direkt in Qt schreibst?
whois, nmap ecc... ist window sowieso draussen ....
also bleibt mac & linux...

which nmap oder which etheral , host ,dig ist der zweck zu wissen ob die programme da sind!

ein qprocess zu einem programm zu senden der nicht da ist gibt sicher ein garantierter programm absturz....

ist das selbe wie auf window ....
ein qprocess senden mit...
start /max /wait http://www.blogistan.co.uk/qt/ ....... wenn firefox bereist offen ist .... dann friert qt ein....
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Also whois würde ich über eine Webanfrage selber lösen und nmap ist zwar schon ein wenig schwieriger, aber selbst dafür gibt es Möglichkeiten. Kennst du die vorgehensweise von nmap, kannst du es auch selbst programmieren.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Außerdem gibts diese ganzen Tools auch alle für Windows. Sei es mit cygwin, oder als mingw oder wie auch immer.
daniel_23
Beiträge: 46
Registriert: 15. Mai 2006 18:53
Wohnort: Oldenburg
Kontaktdaten:

Beitrag von daniel_23 »

Ich schau mir mal bischen was an zu Netzwerkprogrammierung, aber ich hab ja um QT zu lernen mit dem Programm angefangen.
Von daher weiz ich nich ob ich da noch so viel Anstrengung reinsetze, dass was das Programm tun sollte tuts jetz ja :)
Und es gibt ja wesentlich umfangreichere Alternativen, zB Nessus, da werd ich mit meinen paar monaten c Erfahrung nicht mithalten koennen.

Aber paar QT Funktionen, und paar andere Sachen baue ich auf jeden Fall noch ein.
Antworten