2015-07-30 7 views
5

Sagen wir mal ein paar Bilder von einem Qt-Konsolenprogramm und dass Fontmetriken erzeugt werden müssen durch interne Algorithmen benötigt werden (sie verwenden, um die Text Breite/Höhe als Eingabe zu berechnen die Position, an der die Zeichnung erscheinen soll). Dieses Programm muss auf einem Linux ohne GUI laufen (Runlevel-3, im Grunde ein Cluster ohne Display-Server).Erste Font-Metriken ohne GUI (Konsolen-Modus)

Problem: QFontMetrics sind nur verfügbar, wenn eine Qt-Anwendung im GUI-Modus ausgeführt wird.
Jede Problemumgehung, um String-Metriken ohne Display-Server zu erhalten?

+0

Tat beim Versuch, eine QFont zu verwenden, ohne Anwendung es angebracht wirft 'ASSERT Fehler in QGuiApplication :: Schrift(): "no QGuiApplication Instanz"'. Ich weiß, dass es keine wünschenswerte Lösung ist, aber Sie können eine Dummy-Anwendung erstellen und sie als "Container" für die Schriftarten verwenden. Führen Sie die App nicht einfach aus (app.exec()), sondern löschen Sie sie nach der Verwendung. –

+0

Sie brauchen 'gui' Modul, aber Sie brauchen nicht wirklich' UI'. Wahrscheinlich benötigen Sie auch das Objekt 'QApplication' (nicht 'QCoreApplication'), aber Sie müssen kein Widget erstellen. –

+0

Ja, aber die QApplication ruft exit (1) auf, wenn es keinen Display-Server gibt ... – gpalex

Antwort

2

Ok nach zusätzlichen Kommentaren denke ich, verstehe ich dein Problem. tun Sie es einfach so:

include <QApplication> 

int main(int argv, char **args) 
{ 
    QApplication app(argv, args); 
    QApplication::processEvents(); // this should allow `QApplication` to complete its initialization 

    // do here whatever you need 

    return 0; // or some other value to report errors 
} 

Sie auch QGuiApplication diese Version erfordert nicht verwenden können versuchen (nicht verwendet) Widgets.

Siehe auch example in documentation wie man mit gui Fällen umgehen kann.


Dieser Code funktioniert perfekt auf meine Ubnutu mit Qt 5,3

#include <QGuiApplication> 
#include <QFontMetrics> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QGuiApplication a(argc, argv); 

    QFont font("Times", 10, QFont::Bold); 
    qDebug() << font; 
    QFontMetrics metrics(font); 

    qDebug() << metrics.boundingRect("test"); 

    return 0; 
} 

Es funktioniert auch mit Qt 4.8, wenn QApplication verwendet wird.

Projektdatei war ganz einfach

QT  += core 
TARGET = MetricsNoGui 
TEMPLATE = app 
SOURCES += main.cpp 
+0

Nun, ich fürchte, ich habe dir das Kopfgeld zu schnell gewährt! lol. Es schien zu funktionieren, aber in der Tat, wenn Sie die DISPLAY var env (in dem Terminal, wo Sie das Programm aufrufen), wird immer noch abstürzen: "QXcbConnection: Konnte keine Verbindung zur Anzeige \ n Aborted (Core Dumped)" – gpalex

Verwandte Themen