Windows / Linux: Font- und Icongröße, Datei öffnen Probleme

Alles rund um die Programmierung mit Qt
Antworten
darmstadt
Beiträge: 46
Registriert: 18. April 2006 09:33

Windows / Linux: Font- und Icongröße, Datei öffnen Probleme

Beitrag von darmstadt »

Hallo zusammen,

Wenn ich meine Anwendung (die ich unter Windows entwickle) unter Linux kompiliere habe ich drei Probleme:

1) Die font in QLabel von QDialogen und in QToolbar (und wahrscheinlich auch überall) haben unterschiedliche Größe je nachdem ob ich die Anwendung unter Windows unter Linux oder über einen X-Server starte. Weiterhin sind die QIcon in meinem QToolbar unter Linux kleiner.

2) Unter Linux sind Minimize-, Maximize-, Closemöglichkeiten meiner QMainwindow nicht vorhanden.

3) Unter Linux frage ich nach einem Dateiname mit Hilfe von QFileDialog und öffne sie anschließend mit fopen.

Code: Alles auswählen

...
#include <stdio.h>
...
QString fileName = QFileDialog::getOpenFileName(this);
FILE pFile = fopen (this->getUrl().toLatin1().constData(),"rb");
...
Sehr eigenartig ist, dass es manchmal einwandfrei funktioniert und aber, dass ich manchmal einen segmentation fault kriege.

Ich weiss nicht weiter, könnte mir jemand aufklären?

viele Grüße
darmstadt
Beiträge: 46
Registriert: 18. April 2006 09:33

Beitrag von darmstadt »

oups..

natürlich muss es im Code heissen:

Code: Alles auswählen

#include <stdio.h>
...
QString fileName = QFileDialog::getOpenFileName(this);
...
data->setUrl(fielName);
...
FILE pFile = fopen (data->getUrl().toLatin1().constData(),"rb"); 
Entschuldigung.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Warum fopen() und nicht QFile()?

FILE pFile = fopen (data->getUrl().toLatin1().constData(),"rb");

nach dieser Zeile ist der übergebene Dateiname ungültig da das zugehörige Objekt wieder zerstört wurde... ggf. liegt es daran. Oder es sind Sonderzeichen im Dateinamen - Du handelst das nicht korrekt.

Wie gesagt - QFile ist wesentlich besser
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
darmstadt
Beiträge: 46
Registriert: 18. April 2006 09:33

Beitrag von darmstadt »

Danke Christian81 für deine schnelle Antwort.

Was meinst du genau mit viel besser? pFile hat sich über sehr lange Zeit gewährt. Für meine Anwendung ist es wichtig auf sehr große Datei sehr oft zu zugreifen. Dabei ist es wichtig, dass das einlesen so rasch wie möglich passiert. Ich weiss, dass pFile die Anforderungen sehr gut erfüllt.

Ich würde sehr gern pFile weiter benutzen. Gibt es eine Lösung?

danke
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich sehe zwar immer noch absolut keinen Grund warum unbedingt fopen() hier benutzt werden muss, aber hast du schonmal versucht errno auszulesen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
darmstadt
Beiträge: 46
Registriert: 18. April 2006 09:33

Beitrag von darmstadt »

ist QFile genau so schnell wie pFile?
darmstadt
Beiträge: 46
Registriert: 18. April 2006 09:33

Beitrag von darmstadt »

wenn ja sehe ich auch keinen Grund warum ich QFile nicht nutzen sollte -> ich werde QFIle ausprobieren. Weiss du vielleicht einen Antwort auf eine anderen Fragen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wieso sollte es nicht??
Abgesehen davon solltest Du Dir die Doku von QFile mal anschauen... http://doc.trolltech.com/4.2/qfile.html#handle
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Für 1) - indirekt. Es konnte am verwendeten Stylesheet liegen. Ausserdem ist es nicht gut wenn man im ui-File z.B. feste Fontgrössen einträgt, das gibt auch nur Ärger
Für 2) Imho kommt das auf den Windowmanager an - je nachdem ob er es erlaubt oder nicht. Schau auch mal die WFlags an -> http://doc.trolltech.com/4.2/qt.html#WindowType-enum
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
darmstadt
Beiträge: 46
Registriert: 18. April 2006 09:33

Beitrag von darmstadt »

ok, ich habe meine Klassen auf QFile umgestellt. Die dateien die ich einlesen muss sind binary unformated mit Fortran geschrieben worden. Ich habe z.B. diesen code geschrieben um den INT 4 Bytes lang an der Stelle 20 Bytes einzulesen:

Code: Alles auswählen

    //Datei öffnen
    QFile file(this->url);
    if (!file.open(QIODevice::ReadOnly)){
        return 0;
    }
    QDataStream in(&file);

    //Offset setzen
    bool pos = file.seek(Q_UINT64_C(20));

    //Lesen
    quint32 nk;
    in >> nk;
allerdings ist der wert von nk falsch!!

ich komme nicht weiter. Weisst ihr vielleicht was das problem sein könnte?

vielen Dank
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was nützt es Dir in QFile einen Seek von 20 zu machen und dann nicht von QFile sondern vom QDataStream zu lesen? Das sollte man schon QDataStream::skipRawData im QDataStream benutzen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
darmstadt
Beiträge: 46
Registriert: 18. April 2006 09:33

Beitrag von darmstadt »

Stimmt, hätte ich auch machen können.

Das Problem konnte ich mit dem COde loesen:

Code: Alles auswählen

in.setByteOrder(QDataStream::LittleEndian);
Danke trotzdem
Antworten