我正在創建一個模仿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