当前位置:   article > 正文

qml 笔记_qml icon.source: "qrc

qml icon.source: "qrc

说在盘前:切记qml文件,除了main.qml, 其它 .qml 文件必须首字母大写: 否则其它qml文件无法调用到

  • qml 按键 打印 以及资源文件用法

1. Button

  1. Button{
  2. x:260
  3. y:150
  4. width: 90
  5. height: 60
  6. text: "qml test"
  7. onClicked: {
  8. console.log("LM pressed")
  9. }
  10. }

打印就是  console.log("Hello World")

2. 资源文件用法

所谓资源文件,即是将 .icon的图标放到 Button上面,使其更加形象。

创建资源文件方法:

1. 鼠标在工程栏的 Resources 上右键,点击 Add New
2. 依次选择 Qt -> Qt Resource File
 

3. 起个名称为 icon 即可,点击下一步

4. 此时工程栏上面便出现了 icon.qrc 目录,如下:

5. 拷贝 icon 图片到工程路径下

  5.1 在工程目录下新建 icon 文件夹,然后将需要的 .icon 格式文件拷贝进去
  5.2 在工程栏的 icon.qrc 上面右键,点击 Add Existing Directory...  并选择刚创建的icon文件夹
  此时便可以看到icon图片都加载了进来,如下所示:

然后,鼠标在 app.icon 上面右键,即可复制URL 文件路径,如下:

最后一步,将复制的资源URL,添加到 Button的属性内,如下:

  1. Button{
  2. x:160
  3. y:60
  4. width: 90
  5. height: 60
  6. text: "HelloWorld"
  7. icon.source: "qrc:/icon/app.ico"
  8. onClicked: console.log("pressed")
  9. }

 即上述代码中的 icon.source: "qrc:/icon/app.ico"   

 运行效果:

 

布局摆放

  • 布局之 anchors 

 

anchors 使用:

  1. Button{
  2. id: bt1
  3. anchors.centerIn: parent //bt1放到界面中间
  4. width: 150
  5. height: 60
  6. text: "BT1"
  7. icon.source: "qrc:/icon/app.ico"
  8. onClicked: console.log("pressed-1")
  9. }
  10. Button{
  11. id: bt2
  12. anchors.top: bt1.bottom //bt2的顶部放在bt1的底部
  13. anchors.left: bt1.left //bt2的左边与bt1左边对齐
  14. anchors.topMargin: 5 //bt2与bt1上下间隔5
  15. width: 150
  16. height: 60
  17. text: "BT2"
  18. icon.source: "qrc:/icon/app.ico"
  19. onClicked: console.log("pressed-2")
  20. }

效果:

Rectangle 矩形框用法:

  1. Button{
  2. id: bt3
  3. x:10
  4. y:20
  5. width: 90
  6. height: 60
  7. text: "qml test"
  8. onClicked: {
  9. console.log("LM pressed")
  10. }
  11. Rectangle{
  12. anchors.top: bt3.bottom
  13. anchors.topMargin: 20
  14. width: 100
  15. height: 100
  16. color: "#ff0000"
  17. border.color: "black"
  18. border.width: 2
  19. radius: 6 //边角半径
  20. }

效果:

如果要制作圆形,只需要将 radius: 6 中的 6改为width 的1/2 即可,如下:

  1. Rectangle{
  2. anchors.top: bt3.bottom
  3. anchors.topMargin: 20
  4. width: 100
  5. height: 100
  6. color: "#ff0000"
  7. border.color: "black"
  8. border.width: 2
  9. radius: 50 //边角半径为 1/2 width时,为圆形
  10. }

效果:

设置字体颜色

  • Label字体颜色
  1. Label {
  2. text: qsTr("You are on Page 1.")
  3. color: "#ff00ff" //直接使用color 标签
  4. font.pointSize: 24
  5. anchors.centerIn: parent
  6. }
  • Button字体颜色
  1. Button {
  2. id: button
  3. x: 72
  4. y: 36
  5. text: qsTr('<font color="#ff00ff">Home</font>') //通过 <font > 标签来设置
  6. background: Rectangle { // 设置按键字体颜色
  7. implicitHeight: button1.height
  8. implicitWidth: button1.width
  9. color: button.down ? "#ff0000" : "#00ff00"
  10. }
  11. }
  • 多界面之 StackView

通过点击各个界面上的Button来实现界面的切换功能Demo如下:

main.qml 文件内容:

  1. import QtQuick 2.12
  2. import QtQuick.Controls 2.5
  3. ApplicationWindow {
  4. id: window
  5. visible: true
  6. width: 640
  7. height: 480
  8. title: qsTr("Stack")
  9. /* 使用stackView需要添加如下语句 */
  10. StackView {
  11. id: stackView
  12. initialItem: "HomeForm.qml"
  13. anchors.fill: parent
  14. }
  15. }

Page1Form.qml 文件:

  1. xxx
  2. Button {
  3. id: button
  4. x: 72
  5. y: 36
  6. text: qsTr('<font color="#ff00ff">Home</font>')
  7. onClicked: {
  8. stackView.pop(stackView.currentItem) //先清除上一级界面
  9. stackView.push("HomeForm.qml") //进入新的目录HomeForm.qml 界面
  10. }
  11. }
  12. xxx
  • 多界面之 SwipeView

通过左右滑动界面来实现界面的切换功能,Demo如下:

main.qml 文件内容:

  1. import QtQuick 2.12
  2. import QtQuick.Controls 2.5
  3. ApplicationWindow {
  4. id: window
  5. visible: true
  6. width: 640
  7. height: 480
  8. title: qsTr("Stack")
  9. /* 写一个下面的SwipeView 来实现Page1Form界面与Page2Form左右滑动 */
  10. SwipeView {
  11. id: swipeView
  12. anchors.fill: parent
  13. currentIndex: tabBar.currentIndex
  14. // Page1Form.qml 文件名
  15. Page1Form {
  16. }
  17. // Page2Form.qml 文件名
  18. Page2Form {
  19. }
  20. }
  21. }

 

c++与qml结合 前后端分离

Qt官方参考资料:
https://doc.qt.io/qt-5/qtqml-cppintegration-overview.html
https://doc.qt.io/qt-5/qtqml-cppintegration-topic.html

CSDN网友资料:
https://blog.csdn.net/qq_40876689/article/details/107970174

 

 

分离方法如下:

  1. 新建handle.cpp类来处理槽函数
  2. main.qml创建Button Click的信号
  3. handle.cpp 创建处理Button Click信号的槽函数
  4. 修改main.cpp 并连接信号与槽

1. 新建handle.cpp类来处理槽函数

在工程栏Sources文件夹右键, 新建一个cpp class类 名为handle.cpp 并继承QObject。

编写槽函数,如下所示:

handle.h 文件

  1. #ifndef HANDLE_H
  2. #define HANDLE_H
  3. #include <QObject>
  4. class handle : public QObject
  5. {
  6. Q_OBJECT
  7. public:
  8. explicit handle(QObject *parent = nullptr);
  9. signals:
  10. public slots:
  11. void cppSingleClickSlot(); //Button-1 的槽函数
  12. void cppSingleClickSlot2(); //Button-2 的槽函数
  13. };
  14. #endif // HANDLE_H

handle.cpp 文件

  1. #include "handle.h"
  2. #include <QDebug>
  3. handle::handle(QObject *parent) : QObject(parent)
  4. {
  5. }
  6. void handle::cppSingleClickSlot() //Button-1 槽函数
  7. {
  8. qDebug()<<"cpp clicked"<<endl;
  9. }
  10. void handle::cppSingleClickSlot2() //Button-2 槽函数
  11. {
  12. qDebug()<<"cpp clicked 2"<<endl;
  13. }

2. main.qml创建Button Click的信号

main.qml

  1. import QtQuick 2.12
  2. import QtQuick.Controls 2.5
  3. ApplicationWindow {
  4. visible: true
  5. width: 640
  6. height: 480
  7. title: qsTr("Tabs")
  8. signal bt1_singleClick() //创建Button-1 的Click 信号
  9. signal bt2_singleClick() //创建Button-2 的Click 信号
  10. Button{
  11. id: bt1
  12. anchors.centerIn: parent
  13. width: 150
  14. height: 60
  15. text: "BT1"
  16. icon.source: "qrc:/icon/app.ico"
  17. onClicked: bt1_singleClick() //调用信号
  18. }
  19. Button{
  20. id: bt2
  21. anchors.top: bt1.bottom
  22. anchors.left: bt1.left
  23. anchors.topMargin: 5
  24. width: 150
  25. height: 60
  26. text: "BT2"
  27. icon.source: "qrc:/icon/app.ico"
  28. onClicked: bt2_singleClick() //调用信号
  29. }
  30. }

3. 修改main.cpp 并连接信号与槽

  1. #include <QGuiApplication>
  2. #include <QQmlApplicationEngine>
  3. #include <QQmlComponent>
  4. #include "handle.h"
  5. int main(int argc, char *argv[])
  6. {
  7. QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  8. QGuiApplication app(argc, argv);
  9. // QQmlApplicationEngine engine;
  10. // const QUrl url(QStringLiteral("qrc:/main.qml"));
  11. // QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
  12. // &app, [url](QObject *obj, const QUrl &objUrl) {
  13. // if (!obj && url == objUrl)
  14. // QCoreApplication::exit(-1);
  15. // }, Qt::QueuedConnection);
  16. // engine.load(url);
  17. QQmlEngine eng;
  18. QQmlComponent compent(&eng,QUrl(QStringLiteral("qrc:/main.qml")));
  19. QObject *obj = compent.create();
  20. handle h;
  21. QObject::connect(obj,SIGNAL(bt1_singleClick()),&h,SLOT(cppSingleClickSlot()));
  22. QObject::connect(obj,SIGNAL(bt2_singleClick()),&h,SLOT(cppSingleClickSlot2()));
  23. return app.exec();
  24. }

将main.cpp 原来的调用注释掉,写入新的。

运行结果如下图:

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读