获取没有GUI的字体指标(控制台模式)

时间:2015-07-30 19:44:06

标签: qt qt4 console-application fontmetrics

假设一些图像必须由Qt控制台程序生成,内部算法需要字体指标(它们使用文本宽度/高度作为输入计算绘图应该发生的位置)。该程序必须在没有任何GUI的情况下在Linux上运行(运行级别3,基本上是没有任何显示服务器的集群)。

问题: QFontMetrics仅在GUI模式下运行Qt应用程序时可用。
没有任何显示服务器的任何变通方法来获取字符串指标

3 个答案:

答案 0 :(得分:2)

在收到其他评论后,我想我明白了你的问题。 就这样做:

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;
}

当使用QApplication时,它也适用于Qt 4.8。

项目文件非常简单

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

答案 1 :(得分:0)

Qt 4.8具有such QApplication构造函数,其第3个参数可以帮助解决该问题。简单地将false作为第三个参数,并喜欢在Qt控制台应用程序中使用QFontMetrics。如果在没有X服务器的系统上启动应用程序,则不会崩溃。

答案 2 :(得分:0)

我没有找到将 QFontQPrinterQCoreApplication 一起使用的方法:( 但是,如果您能够安装 Xvfb,那么您的 {{1 }} 也可以在没有任何显示器的服务器上运行。我在无头 Raspberry Pi Zero 上使用此设置。

QApplication

这不是最优雅的解决方案,但经过数小时的绝望搜索,我找到了唯一的解决方案。