我正在创建一个模仿A4打印页面的自定义Qt小部件,并且在正确尺寸下呈现字体时出现问题。我的小部件使用QPainter::setViewport
和QPainter::setWindow
来模仿A4页面,使用毫米的十分之一单位,这使我可以轻松绘制。但是,尝试创建特定点大小的字体似乎不起作用,并且使用QFont:setPixelSize
不准确。下面是一些代码:所见即所得的Qt - 字体大小的困境
View::View(QWidget *parent) :
QWidget(parent),
printer(new QPrinter)
{
printer->setPaperSize(QPrinter::A4);
printer->setFullPage(true);
}
void View::paintEvent(QPaintEvent*)
{
QPainter painter(this);
painter.setWindow(0, 0, 2100, 2970);
painter.setViewport(0, 0, printer->width(), printer->height());
// Draw a rect at x = 1cm, y = 1cm, 6cm wide and 1 inch high
painter.drawRect(100, 100, 600, 254);
// Create a 72pt (1 inch) high font
QFont font("Arial");
font.setPixelSize(254);
painter.setFont(font);
// Draw in the same box
// The font is too large
painter.drawText(QRect(100, 100, 600, 254), tr("Wg\u0102"));
// Ack - the actual font size reported by the metrics is 283 pixels!
const QFontMetrics fontMetrics = painter.fontMetrics();
qDebug() << "Font height = " << fontMetrics.height();
}
所以我要求一个254高的字体(1英寸,72分),它太大了。果然,当我通过QFontMetrics
查询字体高度是283高。
是否有其他人知道如何使用像这样的自定义映射模式点字体大小?这一定是可能的。请注意,我看不出逻辑/设备点之间的任何转换
编辑(即在Win32 DPtoLP
/LPtoDP
当量。):嗯,事实证明,我的代码是做工精细毕竟。我将它转换成与打印机一起工作,将其打印出来,然后使用各种文字处理程序打印相同的文本,结果完全相同。似乎要求字体大小不考虑下降,这似乎是常态。
您是否正在制作一个字处理器类应用程序,因为我希望看到您的一些代码。我有兴趣构建一个类似于应用程序的文字处理器,但我发现QTextEdit非常有限。 – 2017-05-09 18:16:20