qml桌面组件扩展

时间:2013-12-01 10:49:49

标签: c++ qt qml qtquick2

我想创建一个可以扩展的用户界面qtquick2,它包含一些桌面组件。如此blogpost中所述,qml / qtquick2的默认呈现应使用距离字段而不是本机文本呈现。我试图扩展qt快速控制。结果相当令人失望。我正在测试ubuntu 64和qt-5.1.1。控件上的文字看起来很糟糕,但标准qml元素(Text / TextEdit)中的所有文本在缩放时看起来都很好。

这让我认为原生渲染是桌面组件的默认渲染。这可以改变吗?

2 个答案:

答案 0 :(得分:3)

Qt Quick Controls的渲染类型将在Qt 5.2中使用样式,例如在TextArea

TextArea {
    /* ... */
    style: TextAreaStyle {
        renderType: Text.QtRendering
    }
}

支持的渲染类型包括:

  • Text.QtRendering
  • Text.NativeRendering(默认)

请参阅TextArea.qmlTextAreaStyle.qml

对于ButtonButtonStyle,没有公共接口可以直接在Qt 5.2中设置渲染类型。但你可以做的是用你自己的文本组件覆盖label

Button {
    id: theButton
    /* ... */
    style: ButtonStyle {
        label: Item {
        implicitWidth: row.implicitWidth
        implicitHeight: row.implicitHeight

        property var __syspal: SystemPalette {
            colorGroup: theButton.enabled ?
                        SystemPalette.Active : SystemPalette.Disabled
        }

        Row {
            id: row
            anchors.centerIn: parent
            spacing: 2
            Image {
                source: theButton.iconSource
                anchors.verticalCenter: parent.verticalCenter
            }
            Text {
                renderType: Text.NativeRendering /* Change me */
                anchors.verticalCenter: parent.verticalCenter
                text: theButton.text
                color: __syspal.text
            }
        }
    }
}

此代码的灵感来自ButtonStyle.qml的默认label组件,经过修改和未经测试。

答案 1 :(得分:1)

我认为您不能更改Qt组件中的文本呈现,因为它们是明确用于桌面应用程序的。

例如,在TextArea中,TextEdit中没有renderType

QtDesktopComponents页面上我另一个提示:

  

您必须将QGuiApplication更改为QApplication。这是因为组件依赖于某些特定于窗口小部件的类(如QStyle)来进行本机渲染。