-1

我在子类菜单栏中绘制了一些文本。并QFontMetrics返回裁剪宽度的矩形。这发生在 Windows 7 中。但它在带有 KDE 的 Debian 中可以正常工作。为什么会发生,我该如何解决?

在此处输入图像描述

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(".");
}
4

1 回答 1

0

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

painter.drawText(rect, Qt::AlignVCenter | Qt::AlignRight, "WWW");

并且Qt::AlignRight会成功的。不过,不知道为什么渲染略有不同。如果您澄清您的任务,那么我们将能够提出更好的方法。

最佳实践甚至不是那样,而是整个窗口的 QVBoxLayout 和带有“拉伸”的上部小部件的 QHBoxLayout (这里不确定您是只想右对齐文本还是在它之前进行固定宽度的左拉伸?)左加 QLabel 添加为小部件(可能与右对齐)。但是你没有问这个,我只能假设你没有尝试更好的布局方法。

于 2016-01-20T04:09:36.003 回答