Qt开发 — QML常用控件

QML Type

本篇主要介绍QtQuick Controls 2,Qt Creator 5.10

1.Container

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.3

ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;
    Row {
        anchors.fill: parent;
        TabBar {
            id: tabBar

            currentIndex: 0
            width: parent.width - addButton.width - btnDelete.width

            TabButton { text: "TabButton" }
        }

        Component {
            id: tabButton
            TabButton { text: "TabButton" }
        }

        Button {
            id: addButton
            text: "+"
            flat: true
            onClicked: {
                tabBar.addItem(tabButton.createObject(tabBar))
                console.log("added:", tabBar.itemAt(tabBar.count - 1))
            }
        }

        Button {
            id: btnDelete
            text: "-"
            flat: true
            onClicked: {
                tabBar.removeItem(tabBar.itemAt(tabBar.count-1));
            }
        }
    }

}
 
 

2.DelayButton

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.3

ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    Label{
        id: lbl;
        text: "未点击";
        font.bold: true;
        font.pixelSize: 28;
        anchors.centerIn: parent;
    }

    DelayButton{
        id: delayBtn;
        text: "PressAndHold";

        onActivated: {
            lbl.text = "已点击";
        }
    }

}
 
 

3.Dial

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.3

ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    Label{
        id: lbl;
        text: "0";
        font.bold: true;
        font.pixelSize: 28;
        anchors.centerIn: parent;
    }

    Dial {
        id: dial
        //Keys.onLeftPressed: {}
        snapMode: Dial.SnapAlways;
        stepSize: 0.1;
        onMoved: {
            lbl.text = value;
        }
    }

    Button{
        id: btnIncrease
        text: "增加"
        anchors.left: dial.right;
        anchors.leftMargin: 40;
        anchors.bottom: dial.bottom;

        onClicked: {
            dial.increase();
        }
    }

    Button{
        id: btnDecrease
        text: "减少"
        anchors.left: btnIncrease.right;
        anchors.leftMargin: 40;
        anchors.bottom: btnIncrease.bottom;

        onClicked: {
            dial.decrease();
        }
    }
}

 
 

4.DialogButtonBox

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.3

ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    Row{
        DialogButtonBox {
            standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel

            onAccepted: console.log("Ok clicked")
            onRejected: console.log("Cancel clicked")
        }

        DialogButtonBox {
            Button {
                text: qsTr("Save")
                DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
            }
            Button {
                text: qsTr("Close")
                DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole
            }
        }
    }




}
 
 

5.Dialog

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.3

ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    Dialog {
        id: dialog
        x:(parent.width-width)/2
        y:(parent.height-height)/2
        implicitWidth: 500;
        implicitHeight: 300;
        title: "Title"
        modal: true;
        standardButtons: Dialog.Ok | Dialog.Cancel

        onAccepted: console.log("Ok clicked")
        onRejected: console.log("Cancel clicked")
    }

    Button{
        text: "open";
        onClicked: {
            dialog.open();
        }
    }

}
 
 

6.Drawer

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.3

ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    Drawer {
        id: drawer
        width: 0.4 * parent.width
        height: parent.height
        dragMargin: parent.width * 0.1; //拉动开始生效的区域,最低为0,也就是0的位置拖动才有效
    }

    Label {
        id: content

        text: "Aa"
        font.pixelSize: 96
        anchors.fill: parent
        verticalAlignment: Label.AlignVCenter
        horizontalAlignment: Label.AlignHCenter

        transform: Translate {
            x: drawer.position * content.width * 0.33
        }
    }

}

 
 

7.Menu

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.3

ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    Button {
        id: fileButton
        text: "File"
        onClicked: menu.open()

        Menu {
            id: menu
            y: fileButton.height
            Action { text: "Cut" }
            Action { text: "Copy" }
            Action { text: "Paste" }

            MenuSeparator { }

            Menu {
                title: "Find/Replace"
                Action { text: "Find Next" }
                Action { text: "Find Previous" }
                Action { text: "Replace" }
            }
        }
    }

}

 
 

8.MenuBar

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

//    Material.theme: Material.Light
//    Material.accent: Material.Purple

    menuBar: MenuBar {
        Menu {
            title: qsTr("&File")
            Action { text: qsTr("&New...") }
            Action { text: qsTr("&Open...") }
            Action { text: qsTr("&Save") }
            Action { text: qsTr("Save &As...") }
            MenuSeparator { }
            Action { text: qsTr("&Quit") }
        }
        Menu {
            title: qsTr("&Edit")
            Action { text: qsTr("Cu&t") }
            Action { text: qsTr("&Copy") }
            Action { text: qsTr("&Paste") }
        }
        Menu {
            title: qsTr("&Help")
            Action { text: qsTr("&About") }
        }
    }

}

 
 

9.Overlay

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    Button {
        anchors.left: parent.left;
        anchors.leftMargin: 20;
        text: "Popup"
        onClicked: popup.open()

        Popup {
            id: popup

            parent: Overlay.overlay

            x: (parent.width - width) / 2
            y: (parent.height - height) / 2
            width: 500
            height: 300
        }
    }

}
 
 

10.PageIndicator

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    SwipeView {
        id: view
        currentIndex: pageIndicator.currentIndex
        anchors.fill: parent

        Page {
            title: qsTr("Home")
            Label{
               anchors.centerIn: parent
               text: "Home";
               font.bold: true;
               font.pixelSize: 28;
            }
        }
        Page {
            title: qsTr("Discover")
            Label{
               anchors.centerIn: parent
               text: "Discover";
               font.bold: true;
               font.pixelSize: 28;
            }
        }
        Page {
            title: qsTr("Activity")
            Label{
               anchors.centerIn: parent
               text: "Activity";
               font.bold: true;
               font.pixelSize: 28;
            }
        }
    }

    PageIndicator {
        id: pageIndicator
        interactive: true
        count: view.count
        currentIndex: view.currentIndex

        anchors.bottom: parent.bottom
        anchors.horizontalCenter: parent.horizontalCenter
    }

}

 
 

11.RangeSlider

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    RangeSlider {
        id: rangeSlider
        from: 1
        to: 100
        first.value: 25
        second.value: 75
        first.onValueChanged:{

        }
    }


    Label{
        id: lbl;
        text: rangeSlider.first.value;
        anchors.centerIn: parent;
    }

    Label{
        text: rangeSlider.second.value;
        anchors.centerIn: parent;
        anchors.verticalCenterOffset: 30;
    }
}



 
 

12.ScrollView

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    ScrollView {
        width: 200
        height: 200
        clip: true

        Label {
            text: "ABC"
            font.pixelSize: 224
        }
    }

    ScrollView {
        width: 200
        height: 200

        anchors.centerIn: parent;
        ListView {
            model: 20
            delegate: ItemDelegate {
                text: "Item " + index
            }
        }
    }
}

 
 

13.SpinBox

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    SpinBox {
        id: spinbox
        from: 0
        value: 110
        to: 100 * 100
        stepSize: 100
        anchors.centerIn: parent

        property int decimals: 2
        property real realValue: value / 100

        //DoubleValidator 为随机数生成的,QIntValidator
        validator: DoubleValidator {
            bottom: Math.min(spinbox.from, spinbox.to)
            top:  Math.max(spinbox.from, spinbox.to)
        }

        textFromValue: function(value, locale) {
            return Number(value / 100).toLocaleString(locale, 'f', spinbox.decimals)
        }

        valueFromText: function(text, locale) {
            return Number.fromLocaleString(locale, text) * 100
        }
    }
}

 
 

14.StackView

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    StackView {
        id: stack
        initialItem: mainView
        anchors.fill: parent
    }

    Component {
        id: mainView

        Row {
            spacing: 10

            Button {
                text: "Push"
                onClicked: stack.push(mainView)
            }
            Button {
                text: "Pop"
                enabled: stack.depth > 1
                onClicked: stack.pop()

            }
            Text {
                text: stack.depth
            }
        }
    }
}
 
 

15.SwipeView

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    SwipeView {
        id: swipeView
        anchors.fill: parent;
        Repeater {
            model: 6
            Loader {
                active: SwipeView.isCurrentItem || SwipeView.isNextItem || SwipeView.isPreviousItem
                sourceComponent: Text {
                    text: index;
                    Component.onCompleted: console.log("created:", index)
                    Component.onDestruction: console.log("destroyed:", index)
                }
            }
        }
    }
}

 
 

16.Switch

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    ColumnLayout {
        Switch {
            text: qsTr("Wi-Fi")
        }
        Switch {
            text: qsTr("Bluetooth")
        }
    }
}

 
 

17.TabBar

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    TabBar {
        width: parent.width
        TabButton {
            text: "First"
            //width: implicitWidth
        }
        TabButton {
            text: "Second"
            //width: implicitWidth
        }
        TabButton {
            text: "Third"
            //width: implicitWidth
        }
    }
}

 
 

18.ToolBar

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    header: ToolBar {
        RowLayout {
            anchors.fill: parent
            ToolButton {
                text: qsTr("‹")
                onClicked: stack.pop()
            }
            Label {
                text: "Title"
                elide: Label.ElideRight
                horizontalAlignment: Qt.AlignHCenter
                verticalAlignment: Qt.AlignVCenter
                Layout.fillWidth: true
            }
            ToolButton {
                id: fileButton;
                text: qsTr("⋮")
                onClicked: menu.open()
            }
        }
    }
    Menu {
        id: menu
        x: fileButton.x;
        y: fileButton.y;
        Action { text: "Cut" }
        Action { text: "Copy" }
        Action { text: "Paste" }

        MenuSeparator { }

        Menu {
            title: "Find/Replace"
            Action { text: "Find Next" }
            Action { text: "Find Previous" }
            Action { text: "Replace" }
        }
    }

    StackView {
        id: stack
        anchors.fill: parent
    }
}

 
 

19.ToolSeparator

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    ToolBar {
        RowLayout {
            anchors.fill: parent

            ToolButton {
                text: qsTr("Action 1")
            }
            ToolButton {
                text: qsTr("Action 2")
            }

            ToolSeparator {}

            ToolButton {
                text: qsTr("Action 3")
            }
            ToolButton {
                text: qsTr("Action 4")
            }

            ToolSeparator {}

            ToolButton {
                text: qsTr("Action 5")
            }
            ToolButton {
                text: qsTr("Action 6")
            }

            Item {
                Layout.fillWidth: true
            }
        }
    }
}

 
 

20.ToolTip

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    Row{
        spacing: 30;
        Button {
            text: qsTr("Save")

            ToolTip.visible: down
            ToolTip.text: qsTr("Save the active project")
        }
        Button {
            text: qsTr("Button")

            ToolTip.visible: pressed
            ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval
            ToolTip.text: qsTr("This tool tip is shown after pressing and holding the button down.")
        }

        Button {
            text: qsTr("Button")
            hoverEnabled: true

            ToolTip.delay: 1000
            ToolTip.timeout: 5000
            ToolTip.visible: hovered
            ToolTip.text: qsTr("This tool tip is shown after hovering the button for a second.")
        }
        Slider {
            id: slider
            value: 0.5

            ToolTip {
                parent: slider.handle
                visible: slider.pressed
                text: slider.value.toFixed(1)
            }
        }
    }
}
 
 

21.Tumbler

import QtQuick 2.10
import QtQuick.Controls.Material 2.3
import QtQuick.Window 2.10
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3


ApplicationWindow{
    visible: true;
    width: 1280;
    height: 720;

    Rectangle {
        id: rect;
        width: frame.implicitWidth + 10
        height: frame.implicitHeight + 10

        function formatText(count, modelData) {
            var data = count === 12 ? modelData + 1 : modelData;
            return data.toString().length < 2 ? "0" + data : data;
        }

        FontMetrics {
            id: fontMetrics
        }

        Component {
            id: delegateComponent

            Label {
                text: rect.formatText(Tumbler.tumbler.count, modelData)
                opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2)
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                font.pixelSize: fontMetrics.font.pixelSize * 1.25
            }
        }

        Frame {
            id: frame
            padding: 0
            anchors.centerIn: parent

            Row {
                id: row

                Tumbler {
                    id: hoursTumbler
                    model: 12
                    delegate: delegateComponent
                }

                Tumbler {
                    id: minutesTumbler
                    model: 60
                    delegate: delegateComponent
                }

                Tumbler {
                    id: amPmTumbler
                    model: ["AM", "PM"]
                    delegate: delegateComponent
                }
            }
        }
    }
}

### 回答1: Qt6 QML实时开发是基于Qt6平台的快速开发框架,它利用Qt Quick语言和QML技术,为开发人员提供了设计和开发图形用户界面(GUI)所需的各种工具。QML是一种描述用户界面的语言,借助它可以轻松地创建各种精美的用户界面。 Qt6 QML实时开发的主要优点是其实时性和高效性。它可以让开发人员在软件开发过程中实时预览结果,使开发效率大大提高。同时,Qt6 QML实时开发还支持快速迭代和动态调整,便于开发人员随时调整和修改界面,同时保证了UI的高度灵活性和可扩展性。 Qt6 QML实时开发还提供了丰富的控件和组件库,这些库都是经过优化和测试的,能够让开发人员快速构建和布局GUI和用户交互界面。此外,Qt6 QML实时开发还支持跨平台开发,可用于开发Android、iOS、Windows、macOS和Linux等平台的应用程序。 综上所述,Qt6 QML实时开发是一种快速、高效、灵活的开发框架,在图形用户界面开发中应用广泛,也是未来GUI开发的一个趋势。它不仅可以大大提高开发效率,同时还提供了丰富的控件和组件,支持跨平台开发,是一款非常有价值的开发工具。 ### 回答2: Qt6 QML是一个开发桌面和移动应用程序的框架,其实时开发方案也得到了广泛的支持和认可。Qt6 QML通过其强大的功能和易于使用的界面设计,使开发人员可以更加方便和快速地开发出高质量的应用程序。 在Qt6 QML实时开发中,其主要特点包括: 1. 设计驱动型开发 Qt6 QML采用的是设计驱动型开发开发人员可以直接在设计界面中进行开发与调试,而不需要手动写代码。这种开发方式可以大大提高开发效率,同时也可以有效降低错误发生的概率。 2. 实时预览界面效果 Qt6 QML具有实时预览界面效果的功能,这意味着开发人员可以在编写代码的同时观察到其效果,从而快速定位和修复问题。这种实时预览的功能也能够提高开发效率,并且可以让开发过程更加享受。 3. 基于组件的开发 Qt6 QML支持基于组件的开发,可以通过在不同的组件之间进行组合,以构建更高级的组件和应用程序。这种基于组件的开发方式,可以大大提高代码的可重用性,减少代码的冗余度。 综上所述,Qt6 QML实时开发是一个高效、方便和灵活的开发工具,可以使开发人员更加轻松和快速地开发出高质量的应用程序。同时,其具有丰富的功能和易于使用的界面设计,也可以让开发过程更加有趣和愉悦。 ### 回答3: Qt6 QML实时开发,指的是使用Qt6和QML技术进行实时开发的过程。Qt6是一种跨平台的应用程序框架,它可以帮助开发者快速创建高性能、现代化的应用程序,而QML则是一种基于JavaScript的用户界面语言,可以帮助开发者快速构建交互式的用户界面。因此,Qt6 QML实时开发可用于开发实时交互应用程序,如数据可视化、游戏、嵌入式系统等领域。 在Qt6 QML实时开发中,开发者可以使用Qt Creator等集成开发环境(IDE)轻松创建QML应用程序。QML语言支持丰富的界面元素和动画效果,使得界面设计非常灵活。此外,Qt6提供了丰富的C++类库和工具,方便开发者实现高性能的后台逻辑和各种设备的接口。 Qt6 QML实时开发的优势在于快速迭代。开发者可以使用实时预览功能,即在编辑代码时即时看到修改后的效果,从而提高开发效率和设计灵活性。此外,由于Qt6和QML都为开发者提供了丰富的功能和现成的库文件,因此可以极大地减少开发时间和成本。 总之,Qt6 QML实时开发是一种高效的技术和方法,可用于实现高性能、现代化的应用程序,为开发者提供快速迭代和灵活性,是目前最流行的开发方式之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值