
正文
qml与c++混合编程,c++和qt混合编程
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何用qml做界面,用C++实现业务逻辑
Qml文档:
通过已有元素拼装新的控件元素
UI布局 + UI动画 + UI状态和简单逻辑
C++ :
Qml文档对应一个controller,一个model(可以不断分层,多个controller 多个model)
Qml 里的UI数据通过属性绑定从model获取
Qml 里的UI事件通过controller响应
相关问答
Q1: QML和C++混合编程中,在qml中向C++的char* 函数传递一个char*的字符串参数,qml不能识别char*的参数类型
qml和c++的交互中一些类型必须进行类型转换。qml是javascript的扩展,肯定无法操作指针,所以用Qstring和char*转换一下吧。具体方法百度上很多
Q2: QML和C++混合编程实现以下功能:
4个文件 main.qml main.cpp myobj.h myobj.cpp
main.qml:
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Layouts 1.2
import com.helloc.com 1.0
Window {
visible: true
height: 360
width: 640
Rectangle{
id: bg
anchors.fill: parent
color:"#C6D9F1"
}
ColumnLayout{
anchors.fill: parent
anchors.margins: 20
spacing: 40
Rectangle{
Layout.preferredWidth: 200
Layout.preferredHeight: 40
color:"#8EB4E3"
border.width: 1
border.color: "darkgrey"
Text{
id: title
width: parent.width
text: "混合编程练习"
color: "black"
anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: Text.AlignHCenter
}
}
Rectangle{
id: rec
Layout.preferredWidth: parent.width * 0.8
Layout.fillHeight: true
Layout.alignment: Qt.AlignHCenter
color:obj.color
MyObj{
id: obj
}
}
RowLayout{
Layout.preferredWidth: parent.width * 0.9
Layout.preferredHeight: 40
spacing: 40
Rectangle{
Layout.preferredHeight: 40
Layout.fillWidth: true
color:"#8EB4E3"
Text{
anchors.centerIn: parent
text: "红"
}
MouseArea{
anchors.fill: parent
onClicked:{
obj.setMyColor(MyObj.MyRed)
}
}
}
Rectangle{
Layout.preferredHeight: 40
Layout.fillWidth: true
color:"#8EB4E3"
Text{
anchors.centerIn: parent
text: "黄"
}
MouseArea{
anchors.fill: parent
onClicked:{
obj.setMyColor(MyObj.MyYellow)
}
}
}
Rectangle{
Layout.preferredHeight: 40
Layout.fillWidth: true
color:"#8EB4E3"
Text{
anchors.centerIn: parent
text: "蓝"
}
MouseArea{
anchors.fill: parent
onClicked:{
obj.color = "blue"
}
}
}
Rectangle{
Layout.preferredHeight: 40
Layout.fillWidth: true
color:"#8EB4E3"
Text{
anchors.centerIn: parent
text: "绿"
}
MouseArea{
anchors.fill: parent
onClicked:{
obj.color = "green"
}
}
}
}
}
}
main.cpp:
#include QGuiApplication
#include QQmlApplicationEngine
#include QtQml
#include "myobj.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterTypeMyObj("com.helloc.com", 1, 0, "MyObj");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
myobj.h:
#ifndef MYOBJ_H
#define MYOBJ_H
#include QObject
#include QColor
class MyObj : public QObject
{
Q_OBJECT
Q_ENUMS(MyColor)
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY myColorChanged)
public:
explicit MyObj(QObject *parent = 0);
enum MyColor{
MyRed = Qt::red,
MyYellow = Qt::yellow,
MyBlue = Qt::blue,
MyGreen = Qt::green,
};
QColor color();
void setColor(QColor color);
Q_INVOKABLE void setMyColor(MyColor myColor);
signals:
void myColorChanged(QColor color);
public slots:
private:
QColor m_color;
};
#endif // MYOBJ_H
myobj.cpp:
#include "myobj.h"
#include QDebug
MyObj::MyObj(QObject *parent) :
QObject(parent),
m_color(QColor("yellow"))
{
}
QColor MyObj::color()
{
return m_color;
}
void MyObj::setColor(QColor color)
{
if(m_color != color){
m_color = color;
emit myColorChanged(color);
}
}
void MyObj::setMyColor(MyColor myColor)
{
this-setColor(QColor(Qt::GlobalColor(myColor)));
}
C++里 枚举的使用 不是很熟练 Color属性的设置若有见解,望指出.//本人环境Qt 5.5
Q3: C++与QML交互时有个问题,可能缺少一步什么操作,求大神指点。
详细一点想要怎么交互.你可以用qmlRegisterType在QML启动之前(main.cpp中)把C++的类注册成为一个QML类型,在C++里面定义好你的属性信号方法之类的,在QML页面上调用这些东西就可以.或者你可以在main.cpp中定义上下文 mlContext*conte
关于qml与c++混合编程和c++和qt混合编程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








