0

ボタンのフォントサイズを変更したい。ここからのソリューションを使用しました

import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

Rectangle {
  id: container
  width: 800
  height: 800

  Button {
    id: cmdQuit
    text: qsTr("Quit")
    width: 100
    height: 100
    style: ButtonStyle {
      label: Text {
        renderType: Text.NativeRendering
        verticalAlignment: Text.AlignVCenter
        horizontalAlignment: Text.AlignHCenter
        font.pointSize: 20
        text: cmdQuit.text
      }
    }
  }
}

残念ながら、これを行うと、Android ネイティブの外観が失われ、フォールバック ベースの外観が得られます。Android でネイティブ スタイルを失わずにフォント サイズを変更する方法はありますか?

1 つのボタンの外観を変更し、他のボタンは同じままにしたい。Qt5 (C++) と QML を使用しています。QtQuick/Controls/Styles/Android フォルダー全体をコピーするソリューションは必要ありません。自分で実行できますが、ひどいものです。

4

3 に答える 3

6

警告 : このソリューションは内部オブジェクトの変更に依存しており、異なる Qt バージョンまたはプラットフォームで動作することは保証されていません

公開されていないオブジェクトのプロパティのみを変更したい場合でも、 (または/ ) のchildrenプロパティを使用してアクセスできます。Itemresourcesdata

呼び出す便利な関数Component.omCompletedの 1 つは、 の階層をダンプする関数Itemです。実装例を次に示します。

function dumpHierarchy(item, level) {
    level = level | 0;
    for (var index = 0; index < item.children.length; ++index) {
        var child = item.children[index];
        print(Array(level*2 + 1).join(" ")+ index +": "+child);
        dumpHierarchy(child, level+1);
    }
}

Android と Qt 5.5 で出力されるものButton:

0: QQuickLoader(0xab87c768)
  0: QQuickLoader_QML_44(0xab7a84f0)
  1: QQuickItem_QML_53(0xab8c8d60)
    0: DrawableLoader_QMLTYPE_51(0xab8bb088)
      0: StateDrawable_QMLTYPE_65(0xab949420)
        0: DrawableLoader_QMLTYPE_51(0xab936ea0)
          0: NinePatchDrawable_QMLTYPE_67(0xab955c90)
            0: QQuickAndroid9Patch_QML_68(0xab913608)
        1: QQuickLoader_QML_66(0xab924838)
    1: QQuickRowLayout(0xab8b03a0)
      0: QQuickImage(0xab8b0960)
      1: LabelStyle_QMLTYPE_50(0xab8c1758)
1: QQuickMouseArea_QML_46(0xab887028)

ここでLabelStyle、関心のある の階層位置を確認できます。すばやく汚いことをしたい場合は、Button要素にこれを追加するだけです:

Component.onCompleted: children[0].children[1].children[1].children[1].font.pixelSize = 50

しかし、これは実際には保守可能ではありません。より受け入れられる解決策は、子階層をトラバースして、Button変更するフォントを見つけることです。

私はfindFont実用的なサンプル Application に関数を入れました:

import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow {
    id: app
    visible: true
    width: 640
    height: 480

    function findFont(object) {
        if (object.font)
            return object.font;
        var font = null;
        for (var index = 0; index < object.children.length && !font; ++index)
            font = findFont(object.children[index]);
        return font;
    }

    Column {
        anchors.centerIn: parent

        Button {
            anchors.horizontalCenter: parent.horizontalCenter
            text: "Button 1"
            width: 300
            height: 100
        }
        Button {
            anchors.horizontalCenter: parent.horizontalCenter
            text: "Button 2"
            width: 300
            height: 100

            Component.onCompleted: {
                findFont(this).pixelSize = 50;
                // On Android and Qt 5.5, this is equivalent :
                //children[0].children[1].children[1].children[1].font.pixelSize = 50;
            }
        }
    }
}
于 2015-09-15T09:21:22.240 に答える
0

TextViewから継承したButton.setTextSize() Buttonを試すことができます。設計時にそれを行う場合は、プロパティを使用できます。設計時に実行している場合は、次のように textSize を適用できます。textSize

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button"
    android:id="@+id/button"
    android:layout_gravity="center"
    android:textSize="25sp"
    />

Javaコードから行う場合、次のことができます。

// Set textsize to 20px here
button.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20); 
于 2015-09-11T13:39:43.893 に答える
0

使ってみましたかUsefont.pixelSize

または、次のことを試しました

QFont f( "Arial", 10, QFont::Bold);
textLabel->setFont( f);
于 2015-09-11T11:08:03.017 に答える