-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 に答える