小编Eri*_*las的帖子

有没有办法从Java程序隐藏win32启动控制台(如果可能,没有JNI)

您从控制台启动Java程序(可能使用.bat脚本).我不希望控制台保持可见,我想隐藏它.

有一个简单的方法吗?没有JNI?

java console winapi

18
推荐指数
3
解决办法
2万
查看次数

QT5字体在各种平台上呈现不同

我想对一些自定义小部件渲染进行可重复测试.为了做到这一点,我将它们绘制到QImage上并将结果保存为PNG.与MacOSX相比,Windows上的输出确实不同.

我照顾:

  • 在所有平台上选择相同的字体(我提供"TTF"字体文件并将代码指向它)
  • 绘制到QImage而不是QPixmap,因为文档说QImage画家应该是平台独立的
  • 我还选择了Antialisating和TextAntialiasing提示
  • 通过QFontDatabase :: font()请求字体,以便指定pointSize而不是pixelSize

如何确保所有平台上的渲染完全相同,以便我的测试运行是可重现的?换句话说,是否可以强制QT5在所有平台上使用相同的字体引擎(例如freetype)?

**

我把问题钉在一个简单的渲染测试程序上.所以代码看起来像:

QFontDatabase fontDb;
fontDb.addApplicationFont(".../fonts/Vera.ttf");

QImage   result(width, height, QImage::Format_RGB32);
QPainter painter(&result);
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::TextAntialiasing);


QBrush background(QColor(205, 205, 205));
painter.fillRect(0, 0, 800, 600, background);

QFont font = fontDb.font("Bitstream Vera Sans", "Normal", 10);
painter.setFont(font);

painter.setPen(QColor(0, 0, 0));
painter.drawText(10, 10, "ABCD abcd 01234567");
Run Code Online (Sandbox Code Playgroud)

比特流Vera字体可以在fontsquirel.com上下载.

在MacOSX(左)和Win32(右)上查看结果,这些结果非常不同:

在此输入图像描述


以下是N1ghtLight的回答和评论,在阅读了他建议的链接后,我更改了代码以获取字体:

QFont font = fontDb_->font(("Bitstream Vera Sans", "Normal", -1);

qreal screenDPI  = QApplication::primaryScreen()->physicalDotsPerInch();
qreal RENDER_DPI = 72;

int pixelSize = (int)((qreal)10 * screenDPI / RENDER_DPI);
font.setPixelSize(pixelSize);
Run Code Online (Sandbox Code Playgroud)

这似乎主要解决了大小不同的字体问题.至少在MacOSX上,字体现在正好是10像素高.在Windows上虽然字体变得更薄,但也更小.我仍然迷茫和困惑......

这是新结果(左侧MacOSX,右侧Windows).白色刻度表示真正的10像素大小.

在此输入图像描述


下面通过G_G回答我改编了代码(关于Linux?移动平台怎么样?这变得非常复杂......).现在,Windows和MacOSX上的输出中的字体都是10像素,但仍然非常不同(左边是MacOSX,右边是Windows).

在此输入图像描述

谢谢.

windows macos fonts qt

17
推荐指数
1
解决办法
7804
查看次数

Java SAX Parser引发UnknownHostException

我要解析的XML文件以:

<!DOCTYPE plist PUBLIC "-//...//DTD PLIST 1.0//EN" "http://www.....dtd">
Run Code Online (Sandbox Code Playgroud)

因此,当我启动SAX praser时,它会尝试在线访问此DTD,并且我得到一个java.net.UnknownHostException.

  1. 在将XML文件提供给SAX解析器之前,我无法修改它
  2. 即使没有互联网连接我也要跑

如何更改SAX Parser行为以便它不会尝试加载DTD?谢谢.

javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance();
factory.setValidating(false);

javax.xml.parsers.SAXParser parser = factory.newSAXParser();
parser.parse(xmlFile, handler);
Run Code Online (Sandbox Code Playgroud)

java dtd sax

7
推荐指数
2
解决办法
5422
查看次数

Java UTF-8奇怪的行为

我试图用Java解码一些UTF-8字符串.这些字符串包含一些组合的unicode字符,例如CC 88(组合diaresis).根据http://www.fileformat.info/info/unicode/char/0308/index.htm,字符序列似乎没问题.

但转换为String后的输出无效.任何的想法 ?

byte[] utf8 = { 105, -52, -120 };
System.out.print("{{");
for(int i = 0; i < utf8.length; ++i)
{
    int value = utf8[i] & 0xFF;
    System.out.print(Integer.toHexString(value));
}
System.out.println("}}");
System.out.println(">" + new String(utf8, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

输出:

    {{69cc88}}
    >i?

java utf-8

5
推荐指数
2
解决办法
9015
查看次数

标签 统计

java ×3

console ×1

dtd ×1

fonts ×1

macos ×1

qt ×1

sax ×1

utf-8 ×1

winapi ×1

windows ×1