Qt,从控件的一个综合性例子开始

前言

在安装好Qt的开发环境后,开始学习Qt的字符串(QString)、容器类(QList,QLinkedList,QVector,QMap,QHash…)、各类控件。具体的使用属于基础知识,本文通过一个综合性的例子对其中比较重要和有趣的部分进行探讨,另外还有一个QString的隐式共享问题。
源码@github:https://github.com/LeeHDsniper/LearnQt/tree/master/CH210

程序运行效果

知识点

界面确实很简单,但是其中所涉及到的知识点都比较重要:
1. 使用Qt Creater的designer进行布局
2. 伙伴模式
3. 水平布局、垂直布局
4. 按钮的几个特性

Qt Creater 的designer

图形话的界面编辑器确实带给了我们许多方便,在C#的开发中,一直不会脱离图形界面的设计模式,但是有一个好处是在图形界面的所有编辑操作,最后都会转换为代码形式,也就是说可以在代码上看到做出的改变。但是QtCreater的designer模式下,所做的改变不会出现再代码上,只会对ui的XML文件进行改写。所以还是尽量使用手写代码的模式进行开发比较好。

这个实例中用到了上图界面上方的第三个按钮(伙伴模式)和第六个按钮(水平布局)。
Designer的其他使用方法和大部分图形界面设计器一样,处理伙伴模式和布局等不同点,至于各类控件的属性修改、事件“注册”都相同。

布局

Qt提供了水平排列布局、垂直排列布局和网格排列布局。
垂直排列布局:
| Lable1 |
| Button1 |
| Button2 |
上述三个控件就是水平布局
水平排列布局:
| Lable1 | Button2 | Button3 |
上述三个控件就是垂直布局
三种布局的使用将在后面详细解释。

按钮的几个特性


  1. default
    default是QPushButton的属性之一,如果default设为 true,那么当用户按下enter键,对应的就相当于按下default设为true的键,这个属性的使用有一些限制。

This property holds whether the push button is the default button.
Default and autodefault buttons decide what happens when the user presses enter in a dialog.
——[Qt官方文档]
2.enable
设置按钮是否可以按下(触发click信号)

隐式共享

隐式共享又称为回写复制(copy on write),当两个对象共享一份数据时(通过浅拷贝实现数据块的共享),如果数据不改变,则不进行数据的复制;而当某个对象需要需要改变数据时,则执行深拷贝。
浅拷贝:复制对象的一个引用
深拷贝:生成对象的一个完整复制品
隐式共享会维护一个指向对象的指针,以及在对象中维护一个引用计数器。
例如:

QString str1="hello";
QString str2=str1;

那么在str1中的引用计数器就会置为2,而且str2实际上只是str1的一个引用。
再例如:

......
str2[0]='e';

那么str2就会成为str1的一个完成复制,str1和str2的引用计数器都会置为1。

下一节将讲述Qt5的布局管理之分割窗口

### 回答1: 好的。 在 Qt 中使用 QML 的控件,举个例子,例如你可以使用 QML 的 Button 控件,来创建一个简单的按钮。例如: ``` import QtQuick 2.0 Rectangle { width: 200 height: 50 Button { text: "Click me" onClicked: { console.log("Button clicked") } } } ``` 这样,你就可以在 QML 中使用 Button 控件了。 ### 回答2: 在QT中使用QML控件可以创建一个简单的登录界面,例如: ``` import QtQuick 2.0 import QtQuick.Controls 2.0 ApplicationWindow { visible: true width: 400 height: 300 title: "登录" Rectangle { width: 300 height: 200 color: "lightgray" anchors.centerIn: parent Column { anchors.centerIn: parent spacing: 10 TextField { id: usernameField width: 200 placeholderText: "请输入用户名" } TextField { id: passwordField width: 200 placeholderText: "请输入密码" echoMode: TextInput.Password } Button { width: 100 height: 40 text: "登录" onClicked: { var username = usernameField.text var password = passwordField.text // 验证用户名和密码 if (username === "admin" && password === "123456") { console.log("登录成功") } else { console.log("用户名或密码错误") } } } } } } ``` 上述代码中,使用了`ApplicationWindow`作为窗口,内部嵌套了一个灰色的`Rectangle`作为登录框。在这个登录框内部,使用`Column`布局将用户名输入框、密码输入框和登录按钮垂直排列。 通过`TextField`控件创建了两个输入框,分别用于输入用户名和密码。其中,密码输入框的`echoMode`属性被设置为`TextInput.Password`,以保护输入的密码。 通过`Button`控件创建了一个登录按钮,在点击按钮时,通过`onClicked`信号来验证输入的用户名和密码。如果用户名是"admin"且密码是"123456",则在控制台输出"登录成功",否则输出"用户名或密码错误"。 这个例子展示了如何使用QML控件创建一个简单的登录界面,在实际应用中,我们可以根据需要添加更多的功能和界面元素。 ### 回答3: 在QT中使用QML的控件,可以举一个常见的例子是使用QML的Text控件来显示文本内容。 QML的Text控件一个用于显示文本的基础控件,它可以用来展示静态文本或动态文本,支持设置字体、颜色、大小、对齐方式等属性,以及响应用户的点击事件。 例如,我们可以创建一个QML文件,命名为example.qml,其中包含一个Text控件,用于显示"Hello World!"这个文本。具体代码如下: ```qml import QtQuick 2.0 Text { text: "Hello World!" font.pixelSize: 24 color: "red" anchors.centerIn: parent } ``` 在QT中,我们可以使用QQmlApplicationEngine类来加载这个QML文件,并将其作为界面展示出来。具体代码如下: ```cpp #include <QGuiApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/example.qml"))); return app.exec(); } ``` 通过以上代码,我们可以在QT应用程序中展示一个带有"Hello World!"文本的界面。可以根据需求对Text控件的属性进行修改,例如改变字体大小、颜色,来实现不同的显示效果。 这只是一个简单的例子QT中使用QML的控件还有很多种类,可以根据不同的需求选择适合的控件来实现界面显示和交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值