为什么QFontMetrics在Windows 7中以裁剪宽度返回rect?

时间:2016-01-20 01:33:12

标签: qt windows-7 qpainter qmenubar

我在子类菜单中绘制一些文本。 QFontMetrics返回带有裁剪宽度的矩形。这种情况发生在Windows 7中。但它可以像Debian一样在KDE中运行。为什么会发生这种情况?如何解决?

enter image description here

class MainMenuBar : public QMenuBar
{
public:
    explicit MainMenuBar(QWidget *parent = 0);

protected:
    virtual void paintEvent(QPaintEvent *event);

private:
    QFont _font;
};

MainMenuBar::MainMenuBar(QWidget *parent) : QMenuBar(parent)
{
    _font = font();
}

void MainMenuBar::paintEvent(QPaintEvent *event)
{
    QMenuBar::paintEvent(event);

    QPainter painter(this);

    painter.setFont(_font);

    QRect rect = geometry();
    rect.setRight(200);
    rect.setLeft(rect.right() - QFontMetrics(_font).width("WWW")); // Cuts
    //rect.setLeft(rect.right() - QFontMetrics(font()).width("WWW")); // Doesn't cut
    painter.drawText(rect, Qt::AlignVCenter, "WWW");
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    setMenuBar(new MainMenuBar(this));
    menuBar()->addAction(".");
}

1 个答案:

答案 0 :(得分:0)

在类似的情况下,我不会限制这样的文字。只要尽可能长(或更好)分配矩形,或者可能适合4 W(不太好)。

Qt::AlignRight

而且'会做到这一点。不知道为什么渲染会略有不同。如果你澄清了你的任务,那么我们将能够提出更好的方法。

最佳做法 甚至不是那个,而是整个窗口的QVBoxLayout和QHBoxLayout用于带有'stretch'的上部小部件(这里不确定你是否只是想要右对齐文本或在它之前做一个固定宽度的左伸展?)在左边加上QLabel作为小部件添加(可能是正确的对齐)。但你不要问这个,我只能假设你没有尝试更好的布局方法。