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



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

问题: QFontMetrics仅在GUI模式下运行Qt应用程序时可用。任何解决方案,以获得字符串指标没有任何显示服务器?

好了,我想我明白你的问题了。就像这样做:

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,这个版本不需要(不使用)小部件。

请参阅文档中的示例如何处理无gui情况。


这段代码在我的ubuntu和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

Qt 4.8有这样的QApplication构造函数,它的第三个参数可以帮助解决这个问题。简单地提供false作为第三个参数,并享受在Qt控制台应用程序中使用QFontMetrics。如果在没有X服务器的系统上启动应用程序,将不会出现崩溃

我没有找到使用QFontQPrinterQCoreApplication的方法:(但是,如果您能够安装Xvfb,那么您的QApplication也将在服务器上运行而没有任何显示。我在无头树莓派Zero上使用这个设置。

Xvfb :1 -screen 0 1024x768x16 &
export DISPLAY=:1.0
./YourQApplication

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

最新更新