9

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

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

4

3 回答 3

3

好的,经过额外的评论,我想我理解你的问题。就这样做:

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 案例。


这段代码在我的带有 Qt 5.3 的 Ubnutu 上完美运行

#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
于 2015-08-10T10:37:14.827 回答
0

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

于 2019-02-15T17:07:09.777 回答
0

我没有找到使用QFontQPrinter使用的方法QCoreApplication:(但是,如果您能够安装Xvfb,那么您QApplication也可以在没有任何显示器的服务器上运行。我在无头 Raspberry Pi 零上使用此设置。

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

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

于 2021-03-09T17:41:13.207 回答