Qt Meta Language or Qt Modeling Language (QML) is a Javascript-inspired user interface mark-up language used by Qt for designing user interfaces. Qt provides you with Qt Quick components (widgets powered by the QML technology) to easily design touch-friendly
UI without C++ programming. We will learn more about how to use QML and Qt Quick components to design our program's UI by following the steps given in the following section.
Quick
因为"讨厌"(最早MFC写烦了), 所以这么多年就躲着C++,自然也就放弃了Qt,看到OBS用一套Qt代码就搞定了跨平台,还是让我非常惊讶。速度重新看了一下Qt,只能说好强啊,C/C++ yyds !
Qt的几个概念:
所以我们简单看下Qt Widget后就直接进入QML/Quick.
QtWidget
通过qtCreator可以直接生成template,我们看下shell下的hello world,
app.cxx
qmake -project
生成项目文件foo.project然后
make foo.pro
生成Makefile,然后make就可以得到一个foo.app, 通过open foo.app
就能看到你的hello world窗口。多提一句,macOS下QApplication是在QtWidgets.framework中,所以在c_cpp_properties中配置如下:
看看Button Click的实现:
Auto Layout
Qt Widgets通过Layouts和Spacers来实现自动布局,逻辑和Android比较类似,其中Layouts主要就是Vertical Layout和Horizontal Layout,Spaces就是Horizontal Spacer和Vertical Spacer。
所以通过不断的嵌套VLayout和HLayout来实现总体布局的自适应。
Next example
mainwindow.cpp
QML
放一张图片也折腾了我好久,要注意几点:
qrc:/images/qt.png
,这个可以有两种理解方式:images/qt.png
, 即在/下加入目录qrc:/images/qt.png
然后QML更新了自动布局的方式,之前通过V/HLayout才能做布局,现在改用了Google的Adnroid方式,
full
right corner
QML Click
hello
通过QML实现Button click关联Dialog
C++ Invoke
注入一个对象(instance)的基本步骤:
service.h
service.cpp
在engine注册对象,
main.cpp
然后在QML通过Connections关联后就可以直接调用对象,
WebView
Qt与Web混合开发(一)--简单使用 - 知乎
hello.pro
QT += core gui webenginewidgets
main.cpp
注:
Widget or QML?
2021: 关于Qt选择qml还是widget的深度思考 - 知乎
评论中这句话还是比较务实: "我个人觉得如果这个应用是用手指头操作,那么用 QML 更合适,如果是用鼠标操作,那么用 Widget 更合适。"
参考阅读