Почему QFontMetrics возвращает прямоугольник с обрезанной шириной в Windows 7?

Я рисую текст в подклассах меню. А также QFontMetrics вернуть прямоугольник с обрезанной шириной. Это происходит в Windows 7. Но это работает, как я ожидаю, в Debian с KDE. Почему это происходит и как я могу это исправить?

введите описание изображения здесь

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 ответ

В подобной ситуации я бы не стал так ограничивать текст. Просто выделите прямоугольник как можно дольше (лучше) или, возможно, чтобы он соответствовал 4 Вт (не так хорошо).

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

А также Qt::AlignRight сделает свое дело. Не знаю, почему рендеринг немного отличается. Если вы уточните свою задачу, мы сможем предложить лучший подход.

Лучшей практикой будет даже не это, а QVBoxLayout для всего окна и QHBoxLayout для верхнего виджета с помощью 'stretch' (здесь вы не уверены, хотите ли вы просто выровнять текст по правому краю или сделать растяжку с фиксированной шириной по левому краю перед ним?) На левый плюс QLabel добавлен в качестве виджета (возможно, с правым выравниванием). Но вы не спрашиваете об этом, и я могу только предположить, что вы не пробовали лучший макет.

Другие вопросы по тегам