2015-07-30 5 views
5

Скажем некоторые изображения должны быть сгенерированы с помощью консольной программы Qt и что шрифт метрики необходимы внутренние алгоритмы (они используют текст ширина/высота в качестве входных данных для вычисления положение, в котором должен быть рисунок). Эта программа должна работать на Linux без какого-либо графического интерфейса (уровень запуска-3, в основном кластер без какого-либо сервера отображения).Получение метрик шрифта без графического интерфейса пользователя (режим консоли)

Задача: QFontMetrics доступны только при запуске приложения Qt в графическом режиме.
Любое обходное решение для получения строковых показателей без какого-либо сервера отображения?

+0

Действительно, при попытке использовать QFont без заявки прилагается он бросает "отказ ASSERT в QGuiApplication :: шрифт():„нет экземпляра QGuiApplication“. Я знаю, что это не желательное решение, но вы можете создать фиктивное приложение и использовать его как «контейнер» для шрифтов. Просто не выполняйте приложение (app.exec()), но удалите его после использования. –

+0

вам нужен 'gui' модуль, но вам не нужен фактический' UI'. Вероятно, вам также понадобится объект QApplication (а не 'QCoreApplication'), но вам не нужно создавать какой-либо виджет. –

+0

да, но QApplication вызывает exit (1), когда нет сервера отображения ... – gpalex

ответ

2

Ok после дополнительных комментариев Я думаю, что понимаю вашу проблему. Просто сделай это так:

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 
} 

Вы также можете попробовать использовать QGuiApplication эта версия не требует (не использует) виджетов.

См. Также example in documentation как обращаться с любыми случаями gui.


Этот код прекрасно работает на моем Ubnutu с 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; 
} 

Он также работает с Qt 4.8, когда QApplication используется.

файл проекта был довольно прост

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

Ну, боюсь, я слишком быстро предоставил вам щедрость! лол. Казалось, что это сработало, но на самом деле, если вы отключите DISPLAY var env (в терминале, где вы вызываете эту программу), он все равно будет разбит: «QXcbConnection: не удалось подключиться к отображению \ n Отменено (core dumped)» – gpalex