6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

QMLのTextでレイアウトを調整する

Posted at

Qt 5.11、5.12あたりの情報です。

Windows、Mac、Android、iOSで動作するQMLを書いていて、フォントの違いによるレイアウト調整が面倒だったのでメモを残しておきます。

#Textの枠の中央に文字を配置する
height、widthで設定した領域のうち、どこに文字を配置するかの指定方法。

Text {
    verticalAlignment: Text.AlignVCenter
    horizontalAlignment: Text.AlignHCenter
}

#Textの行間を調整する
以下の記述で、ピクセル数で行間を指定できます。

Text {
    lineHeightMode: Text.FixedHeight
    lineHeight: 20
}

それに対して、割合での行間指定方法。

Text {
    lineHeightMode: Text.ProportionalHeight //デフォルトなので省略可
    lineHeight: 1.8
}

#Textのトラッキング(文字間隔)
指定のピクセル数だけ、文字と文字の間隔があきます。マイナスだと狭まります。

Text {
    font.letterSpacing : 3
}

#Textの配置の調整にlineLaidOutを使う
テキストの1行ごとにx、y、width、heightを変更できます。
例えば2行目の幅を10ピクセルずつ狭めてテキストを配置するには、下記のようにします。

Text {
    onLineLaidOut: {
        if (line.number === 1)
        {
            line.x = line.x + 10
            line.width = line.width - 20
        }
    }
}

行ごとにx、y、width、heightを指定できるので、ボタンなどを避けて配置することが可能です。
行番号numberは0からはじまるので注意。
さらに、forceLayout()も併用すれば動的に変更できる…のかな。試してない。

#枠内に収まりきらなかったテキストをToolTipでホバー表示する
Textには、枠内にテキストが収まらなかった場合にtrueになる、truncatedというプロパティがあります。maximumLineCountかelideを設定することで、truncatedが有効になります。
同じく、MouseAreaのhoverEnabledをtrueにすることでcontainsMouseが有効になります。
上記の双方がtrueなら、ToolTipを表示させます。

Text {
    id: name
    wrapMode: Text.Wrap
    maximumLineCount: 1

    MouseArea {
        anchors.fill: parent
        hoverEnabled: true
        ToolTip {
            visible: parent.containsMouse && name.truncated
            delay: 500
            text: name.text
            contentItem: Text { } //contentItemでTextをカスタマイズできる
            background: Rectangle { } //同じく背景も。
        }
    }
}

#qmlで使われるデフォルトのフォントを指定する
main関数で下記のように書くとデフォルトのフォントを指定できます。

    QGuiApplication::setFont(QFont("Arial"));

QGuiApplicationのオブジェクトを生成する前に実行すると良いようです。
QGuiApplicationのコンストラクタで生成されるQFontが最初からsetFontで指定したフォントになるためです。(OSデフォのQFontが生成されない)

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?