[solved] SLOTS anderer Klassen nutzen
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:
Funktioniert beides leider nich, ich hab kein Beispiel fuer sowas gefunden, macht qmake das automatisch?
EDID:
So das hab ich schonmal geschafft:
Auzerdem wuerde ich noch gern die existenz von den system Befehlen pruefen, aber mit:
hats auch nich geklappt
EDID:
Auch noch hingekriegt, der path war falsch
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?
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!")
}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!")
}Code: Alles auswählen
!exists( /usr/bin/ping ) {
error( "No ping command found" )
}EDID:
Auch noch hingekriegt, der path war falsch
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!")
}
}naja mit $$( PATH ) funktioniert es, da sind bloz nen haufen : : : : die muessten in leerzeilen umgewandelt werden.
Und ist die Struktur unter mac die selbe?
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?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.
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
http://orgizm.net/~daniel/downloads/dev ... .2.tar.bz2
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....
}
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:
thx patrick08!patrik08 hat geschrieben:da "which" auch auf mac installiert ist ... nicht nur auf linux...
QString pfad = GrabWhich("ping");
Das werd ich mal demnaechst einbauen, fuer die QProcesses die ich nich loswerde, nmap ist bestimmt nicht leicht loszuwerden
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".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?
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:
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
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:
Also die ping.h funktioniert nicht als normaler user da wird immer -1 fuer error zurueckgegeben, schon eine der ersten ueberpruefungen schlaegt fehl:
Mit dem suid-root hab ich auch nur heute durchs googlen aufgeschnappt, aber scheint ja ne Rechte sache zu sein, jedenfalls bei diesem header
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.-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
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.
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.
whois, nmap ecc... ist window sowieso draussen ....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?
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:
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
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.
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.