赞
踩
TabView 可以实现类似 Windows 任务管理器的界面,有人叫 TabView 为标签控件,有人又称之为选项卡控件,我们知道它就是这么个东西就行了。现在来介绍 TabView 的属性和方法。
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
tabview_simple.qml 的内容如下:
- import QtQuick 2.2
- import QtQuick.Controls 1.2
-
- Rectangle {
- width: 360;
- height: 240;
- color: "lightgray";
-
- Component {
- id: tabContent;
- Rectangle {
- implicitWidth: 100;
- implicitHeight: 100;
- anchors.fill: parent;
- color: Qt.rgba(Math.random(), Math.random(), Math.random());
- }
- }
-
- Button {
- id: addTab;
- x: 8;
- y: 8;
- width: 60;
- height: 25;
- text: "AddTab";
- onClicked: {
- tabView.addTab("tab-" + tabView.count, tabContent);
- }
- }
-
- TabView {
- id: tabView;
- anchors.top: addTab.bottom;
- anchors.margins: 8;
- anchors.left: parent.left;
- anchors.right: parent.right;
- anchors.bottom: parent.bottom;
- }
- }
执行后,点击四次 "AddTab" 按钮后,再选择 "tab-1" 后的效果图如下所示。
太丑了点儿,对吧。没关系,咱们可以用 TabViewStyle 来定制。
TabView 有 style 这个属性,可以为其指定一个 TabViewStyle 对象来定制 TabView。tabBar 绘制标签栏的背景。tab 绘制一个个的标签。frame 绘制 TabView 的边框。一般我们设置这三个属性即可打造一个美丽动人的 TabView。
下面看一个示例:
- import QtQuick 2.2
- import QtQuick.Controls 1.2
- import QtQuick.Controls.Styles 1.2
- import QtQuick.Layouts 1.1
-
- Rectangle {
- width: 360;
- height: 240;
- color: "lightgray";
- id: root;
- property var icons: ["call1.png", "call2.png", "call3.png"];
- Component.onCompleted: {
- tabView.addTab("ABC", tabContent);
- tabView.addTab("ZXY", tabContent);
- tabView.addTab("MQF", tabContent);
- tabView.addTab("WKJ", tabContent);
- }
-
- Component {
- id: tabContent;
- Rectangle {
- implicitWidth: 100;
- implicitHeight: 100;
- anchors.fill: parent;
- color: Qt.rgba(Math.random(), Math.random(), Math.random());
- }
- }
-
- TabView {
- id: tabView;
- anchors.fill: parent;
-
- style: TabViewStyle {
- tab: Item{
- implicitWidth: Math.max(text.width + 8, 80);
- implicitHeight: 48;
- Rectangle {
- width: (styleData.index < control.count - 1) ? (parent.width - 2) : parent.width;
- height: parent.height - 4;
- anchors.top: parent.top;
- anchors.left: parent.left;
- anchors.leftMargin: 1;
- visible: styleData.selected;
- gradient: Gradient {
- GradientStop{position: 0.0; color: "#606060";}
- GradientStop{position: 0.5; color: "#c0c0c0";}
- GradientStop{position: 1.0; color: "#a0a0a0";}
- }
- }
- Rectangle {
- width: 2;
- height: parent.height - 4;
- anchors.top: parent.top;
- anchors.right: parent.right;
- visible: styleData.index < control.count - 1;
- gradient: Gradient {
- GradientStop{position: 0.0; color: "#404040";}
- GradientStop{position: 0.5; color: "#707070";}
- GradientStop{position: 1.0; color: "#404040";}
- }
- }
- RowLayout {
- implicitWidth: Math.max(text.width, 72);
- height: 48;
- anchors.centerIn: parent;
- z: 1;
- Image{
- width: 48;
- height: 48;
- source: root.icons[styleData.index%3];
- }
- Text {
- id: text;
- text: styleData.title;
- color: styleData.selected ? "blue" : (styleData.hovered ? "green" : "white");
- }
- }
- }
- tabBar: Rectangle {
- height: 56;
- gradient: Gradient {
- GradientStop{position: 0.0; color: "#484848";}
- GradientStop{position: 0.3; color: "#787878";}
- GradientStop{position: 1.0; color: "#a0a0a0";}
- }
- Rectangle {
- width: parent.width;
- height: 4;
- anchors.bottom: parent.bottom;
- border.width: 2;
- border.color: "#c7c7c7";
- }
- }
- }
- }
- }
执行后的效果图如下所示:
TabViewStyle 对象的 tab 组件相对复杂一些,我设计为 “图标+文本” 的样式,图标在左, 文本在右。当选中标签时,使用 Rectangle 高亮背景。选中标签(styleData.selected为true)的文本,颜色为蓝色;未选中标签的文本,鼠标悬停(styleData.hovered为true)时为绿色,否则为白色。
Slider 类代表一个水平或垂直的滑块控件,通常用于让用户在某个取值范围内选择一个值。先来看一个示意图,见下图。
滑块组件分为面板(panel)、滑槽(groove)、刻度线(tickmarks)和滑块(handle)四部分。而 Slider 对应的用来定制滑块控件外观的 SliderStyle 类,恰恰就有 groove、handle、 panel、tickmarks 四个组件。也就是说,滑块控件的每个组成部分,都可以定制。不过,我们一般只定制 handle 和 groove,其他两个定制起来稍微麻烦一些。
现在隆重地介绍我们的重量级嘉宾:style。使用 style 属性,你就可以随心所欲地妆扮你的滑块控件了。一般,style 属性指向一个 SliderStyle 对象。
SliderStyle 用来定制一个 Slider 的外观,你可以定制面板、滑槽、滑块、刻度线四部分。
需要说明的是,一般我们只需要定制 groove 和 handle 就能够得到不错的效果。
好啦,现在我们提供一个滑块的示例,看看 Slider 的各个属性的用法。slider_demo.qml 代码如下:
- import QtQuick 2.2
- import QtQuick.Controls 1.2
- import QtQuick.Controls.Styles 1.2
-
- Rectangle {
- width: 320;
- height: 240;
- color: "lightgray";
- Row {
- anchors.fill: parent;
- spacing: 20;
- Column{
- width: 200;
- spacing: 16;
- Text {
- id: sliderStat;
- color: "blue";
- text: "current - 0.1";
- }
- Slider {
- width: 200;
- height: 30;
- stepSize: 0.01;
- value: 0.1;
- onValueChanged: {
- sliderStat.text = "current - " + value;
- }
- Component.onCompleted: console.log(activeFocusOnPress);
- }
-
- Slider {
- width: 200;
- height: 30;
- minimumValue: 0;
- maximumValue: 100;
- stepSize: 1;
- value: 50;
- tickmarksEnabled: true;
- }
- Slider {
- id: customGrooveAndHandle;
- width: 200;
- height: 30;
- stepSize: 0.1;
- value: 0;
- tickmarksEnabled: true;
- style: SliderStyle {
- groove: Rectangle {
- implicitWidth: 200;
- implicitHeight: 8;
- color: "gray";
- radius: 8;
- }
- handle: Rectangle {
- anchors.centerIn: parent;
- color: control.pressed ? "white" : "lightgray";
- border.color: "gray";
- border.width: 2;
- width: 34;
- height: 34;
- radius: 12;
- }
- }
- }
- Slider {
- id: customPanel;
- width: 200;
- height: 36;
- stepSize: 0.1;
- value: 0;
- tickmarksEnabled: true;
- style: SliderStyle {
- groove: Rectangle {
- implicitWidth: 200;
- implicitHeight: 8;
- color: "gray";
- radius: 8;
- }
- handle: Rectangle {
- anchors.centerIn: parent;
- color: control.pressed ? "white" : "lightgray";
- border.color: "gray";
- border.width: 2;
- width: 34;
- height: 34;
- radius: 12;
- Text {
- anchors.centerIn: parent;
- text: control.value;
- color: "red";
- }
- }
- panel: Rectangle {
- anchors.fill: parent;
- radius: 4;
- color: "lightsteelblue";
- Loader {
- id: grooveLoader;
- anchors.centerIn: parent;
- sourceComponent: groove;
- }
- Loader {
- id: handleLoader;
- anchors.verticalCenter: grooveLoader.verticalCenter;
- x: Math.min(grooveLoader.x + (control.value * grooveLoader.width) / (control.maximumValue - control.minimumValue), grooveLoader.width - item.width);
- sourceComponent: handle;
- }
- }
- }
- }
- }
- Slider {
- width: 30;
- height: 200;
- orientation: Qt.Vertical;
- stepSize: 0.1;
- value: 0.2;
- tickmarksEnabled: true;
- }
- }
- }
使用 qmlscene 加载 slider_demo.qml,效果如下图所示。
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。