2018年4月10日

ListModel

モジュール

QtQml.Models 2.1

クラス継承

QQmlListModel → QAbstractListModelQAbstractItemModel → QObject

プロパティー

count: int = 0 readonly
dynamicRoles: bool = false

シグナル

countChanged() signal

メソッド

void append(Object dictionary)
void clear()
Object get(int index)
void insert(int index, Object dictionary)
void insert(int index, Array [Object, Object, ...])
void move(int from, int to, int count)
void remove(int index, int count = 1)
void set(int index, Object dictionary)
void setProperty(int index, string property, var value)
void sync()

説明


プロパティーの説明

count: int

dynamicRoles: bool

メソッドの説明

void append(Object dictionary)

void clear()

Object get(int index)

void insert(int index, Object dictionary)

void move(int from, int to, int count)

void remove(int index, int count)

void set(int index, Object dictionary)

void setProperty(int index, string property, var value)

void sync()

参考情報

ListElement

モジュール

QtQml.Models 2.1

クラス継承

QQmlListElement → QObject

説明


注意


ロールはプロパティーと同じ形式だが値だけが設定でき、JavaScript の式は設定できない。

参考情報

fontInfo

クラス継承

QJSValue

プロパティー

fontInfo.bold: bool = false
fontInfo.family: string = プラットフォームデフォルト
fontInfo.italic: bool = false
fontInfo.pixelSize: int = プラットフォームデフォルト
fontInfo.pointSize: real = プラットフォームデフォルト
fontInfo.styleName: string = "Regular"
fontInfo.weight: int = 50

説明


QFontInfo の一部を QML で参照するときに使われるタイプ。

プロパティーの説明

fontInfo.bold: bool

true ならば太文字。

fontInfo.family: string

ファミリー名。

fontInfo.italic: bool

true ならばイタリック体。

fontInfo.pixelSize: real

ピクセルサイズ。

fontInfo.pointSize: real

ポイントサイズ。

fontInfo.styleName: string

スタイル名。

fontInfo.weight: int

ウェイト。

注意


toString() は font のような説明文字列を返さない。

問題


QFontInfo のリファレンスは underline()、overline()、strikeout() の記述が抜けている。

参考情報

font

クラス継承

QFont

プロパティー

font.bold: bool = false final
font.capitalization: Capitalization =  Font.MixedCase final
font.family: QString = プラットフォームデフォルト final
font.hintingPreference: HintingPreference = Font.PreferDefaultHinting) final
font.italic: bool = false final
font.kerning: bool = true final
font.letterSpacing: real = 0 final
font.overline: bool = false final
font.pixelSize: int = プラットフォームデフォルト final
font.pointSize: real = プラットフォームデフォルト final
font.preferShaping: bool = true final
font.strikeout: bool = false final
font.styleName: QString = "" final
font.underline: bool = false final
font.weight: FontWeight = Font.Normal final
font.wordSpacing: real = 0 final

説明


フォント指定で使われるタイプ。指定したフォントから実際に使われるフォントが求められて使われる。QFont の機能を部分的に QML で利用していて、pointSize と pixelSize の扱いは QML 向けになっている。

プロパティーの説明

font.bold: bool

true ならば太文字。

font.capitalization: Capitalization

テキスト描画時に小文字を大文字にする方法。以下の方法が用意されている。
列挙値 説明
Font.MixedCase 0 そのままで何も変えない
Font.AllUppercase 1 小文字を大文字に変える
Font.AllLowercase 2 大文字を小文字に変える
Font.SmallCaps 3 小文字をサイズの小さい大文字に変える
Font.Capitalize 4 語の先頭文字を大文字にする。語の区切りはホワイトスペース

font.family: QString

ファミリー名。

font.hintingPreference: HintingPreference

font.italic: bool

true ならばイタリック体。

font.kerning: bool

true ならばカーニングを行う。

font.letterSpacing: qreal

文字間隔を指定値に変更する。正負値共に可能。QFont::setLetterSpacing(QFont::AbsoluteSpacing, 指定値) を呼び出して変更している。

font.overline: bool

true ならば上線を付ける。

font.pixelSize: int

ピクセルサイズ。pointSize を設定した場合に QFontInfo の pixelSize になる。

font.pointSize: qreal

ポイントサイズ。pixelSize を設定した場合に QFontInfo の pointSize になる。

font.preferShaping: bool

true ならば QFont::setStyleStrategy() を呼び出して QFont::PreferNoShaping ビットを落とす。false ならばビットを立てる。

Text タイプのリファレンスに false に設定すると大抵の場合に効率がよくなると書かれている。しかし、拗音や捨て仮名、全角ギリシア文字の小文字などの語幅が広がってしまうため使い道は限られる。

font.strikeout: bool

true ならば取り消し線を付ける。

font.styleName: QString

スタイル名。

font.underline: bool

true ならば下線を付ける。

font.weight: FontWeight

フォントウェイト。0 から 99 までの値で、以下の FontWeight 型の列挙値で設定する。
列挙値
Font.Thin0
Font.ExtraLight12
Font.Light25
Font.Normal50
Font.Medium57
Font.DemiBold63
Font.Bold75
Font.ExtraBold81
Font.Black87

font.wordSpacing: qreal

語間隔を指定値に変更する。正負値共に可能。語の区切りはホワイトスペース。

注意


指定した通りのフォントが使われるのではない。Text では実際に使われるフォントは fontInfo プロパティーでわかるようになっている。しかし、font プロパティーのあるタイプに fontInfo プロパティーがあるとは限らない。実際には Text と Text を継承した Label のみに fontInfo プロパティーがある。

family と styleName に存在しない名前を指定した場合にはデフォルト値が使われエラーにはならない。存在しない場合でも指定した名前が説明文字列に入る。

QFont ではポイントサイズとピクセルサイズを共に設定すると最後に設定したものが有効になり、もう一方は -1 になる。QML の font は QFont とは違って、QFontInfo で求めた値がもう一方の値になり、等式 pixelSize = Math.floor(pointSize * (dpi/72)) が成り立つ。font の説明文字列は QFont の説明文字列のため、どちらかを設定した場合に説明文字列中のもう一方は -1 になり、QML の font の pointSize と pixelSize 両方が説明文字列の値と一致することはない。

QML ではポイントサイズとピクセルサイズの両方を指定すると警告され、ピクセルサイズが優先して使われる。宣言的に値を設定した場合に構文的に優先順を明示する適切な方法がないためこのような制約がある。

toString() が返す説明文字列の情報がプロパティーと一致してはいない。pointSize に 12.5 を設定した場合に、説明文字列の内容は以下のようになる。styleName 設定の有無で 10 要素か 11 要素の違いがある。
QFont(.SF NS Text,12.5,-1,5,50,0,0,0,0,0)
QFont(Osaka,12.5,-1,5,50,0,0,0,0,0,Regular-Mono) (styleName に "Regular-Mono" を設定)
上記の説明文字列の各要素はこのようになる。
説明文字列要素 要素値 QFontInfo の値 QML fontInfo の値
family QString .SF NS Text/Osaka .SF NS Text/Osaka .SF NS Text/Osaka
pointSizeF qreal 12.5 13 13
pixelSize int -1 13 13
styleHint StyleHint 5 (QFont::AnyStyle) QFont::AnyStyle なし
weight int 50 50 50
style Style 0 (QFont::StyleNormal) QFont::StyleNormal なし
underline bool 0 (false) false なし
strikeout bool 0 (false) false なし
fixedPitch bool 0 (false) false なし
空き bool 常に 0 (false) なし なし
styleName QString なし/Regular-Mono Regular/Regular-Mono Regular/Regular-Mono

問題


font のリファレンスには styleName の記述が漏れている。QFont のリファレンスには記述されている。

参考情報

TextMetrics

モジュール

QtQuick 2.4

クラス継承

QQuickTextMetrics → QObject

プロパティー

advanceWidth: qreal = 0 readonly final
boundingRect: QRectF = QRectF(0, 0, 0, 0) readonly final
elide: Qt::TextElideMode = Qt::ElideNone final
elideWidth: qreal = 0 final
elidedText: QString = "" readonly final
font: QFont = プラットフォームデフォルト
height: qreal = 0 readonly final
text: QString = "" final
tightBoundingRect: QRectF = QRectF(0, 0, 0, 0) readonly final
width: qreal = 0 readonly final

シグナル

elideChanged()
elideWidthChanged()
fontChanged()
metricsChanged()
textChanged()

説明


プロパティーの説明

advanceWidth: qreal

boundingRect: QRectF

elide: Qt::TextElideMode

elideWidth: qreal

elidedText: QString

font: QFont

font を参照。

height: qreal

text: QString

tightBoundingRect: QRectF

width: qreal


注意


TextMetrics は Item を継承していないので parent プロパティーはない。従って、フォント参照はコンポーネントスコープ内のものか id 修飾が必要になる。

参考情報

FontMetrics

モジュール

QtQuick 2.4

クラス継承

QQuickFontMetrics → QObject

プロパティー

ascent: real = プラットフォームデフォルト readonly
averageCharacterWidth: real = プラットフォームデフォルト readonly
descent: real = プラットフォームデフォルト readonly
font: font = プラットフォームデフォルト
height: real = プラットフォームデフォルト readonly
leading: real = プラットフォームデフォルト readonly
lineSpacing: real = プラットフォームデフォルト readonly
lineWidth: real = プラットフォームデフォルト readonly
maximumCharacterWidth: real = プラットフォームデフォルト readonly
minimumLeftBearing: real = プラットフォームデフォルト readonly
minimumRightBearing: real = プラットフォームデフォルト readonly
overlinePosition: real = プラットフォームデフォルト readonly
strikeOutPosition: real = プラットフォームデフォルト readonly
underlinePosition: real = プラットフォームデフォルト readonly
xHeight: real = プラットフォームデフォルト readonly

シグナル

fontChanged(font font)

メソッド

real advanceWidth(string text)
rect boundingRect(string text)
rect tightBoundingRect(string text)
string elidedText(string text, Qt::TextElideMode mode, real width, int flags = Qt::TextShowMnemonic)

説明


QFontMetricsF の機能を部分的に利用できるようにしたラッパータイプ。

プロパティーの説明

ascent: real

QFontMetricsF::ascent() を呼び出しその戻り値を返す。

averageCharacterWidth: real

QFontMetricsF::averageCharWidth() を呼び出しその戻り値を返す。

descent: real

QFontMetricsF::descent() を呼び出しその戻り値を返す。

font: font

font を参照。

height: real

QFontMetricsF::height() を呼び出しその戻り値を返す。

leading: real

QFontMetricsF::leading() を呼び出しその戻り値を返す。

lineSpacing: real

QFontMetricsF::lineSpacing() を呼び出しその戻り値を返す。

lineWidth: real

QFontMetricsF::lineWidth() を呼び出しその戻り値を返す。

maximumCharacterWidth: real

QFontMetricsF::maxWidth() を呼び出しその戻り値を返す。

minimumLeftBearing: real

QFontMetricsF::leftBearing() を呼び出しその戻り値を返す。

minimumRightBearing: real

QFontMetricsF::minRightBearing() を呼び出しその戻り値を返す。

overlinePosition: real

QFontMetricsF::overlinePos() を呼び出しその戻り値を返す。

strikeOutPosition: real

QFontMetricsF::strikeOutPos() を呼び出しその戻り値を返す。

underlinePosition: real

QFontMetricsF::underlinePos() を呼び出しその戻り値を返す。

xHeight: real

QFontMetricsF::xHeight() を呼び出しその戻り値を返す。

シグナルの説明

fontChanged(font font)

font および当タイプの独自プロパティーのプロパティー変更通知シグナル。

メソッドの説明

real advanceWidth(string text)

QFontMetricsF::width() を呼び出しその戻り値を返す。

rectf boundingRect(string text)

QFontMetricsF::boundingRect() を呼び出しその戻り値を返す。

rectf tightBoundingRect(string text)

QFontMetricsF::tightBoundingRect() を呼び出しその戻り値を返す。

string elidedText(string text, Qt::TextElideMode mode, real width, int flags)

QFontMetricsF::elidedText() を呼び出しその戻り値を返す。

注意


FontMetrics は Item を継承していないので parent プロパティーはない。従って、フォント参照はコンポーネントスコープ内のものか id 修飾が必要になる。

font 以外の独自プロパティーに対してはそれらのシグナルハンドラーは使わずに font のシグナルハンドラーを使い、シグナルハンドラーで設定した処理中でプロパティーが変更されているかを判断しなければならない。

問題


FontMetrics のリファレンスに fontChanged() シグナルが一般的な動作と異なることが説明されていない。

fontChanged() シグナルは、font プロパティーが変更されたときしか送信されていない。

onAscentChanged や onHeightChanged のように、font 以外の当タイプの独自プロパティーに対してシグナルハンドラーを記述できる。しかし独自プロパティーのすべてのプロパティー変更通知シグナルが fontChanged() になっているため、font を変更するとプロパティー値が同一であってもシグナルハンドラーで設定した処理が実行されてしまう。このため font 以外の独自プロパティーについて、その値が変わったときにのみシグナルハンドラーで設定した処理を呼び出させない。

参考情報