QML和C++混合编程实现以下功能:

QML和C++混合编程实现以下功能:1.画面构成:Title,四个Button,一个Rectangle2.点击[红]Button,Rectangle显示红色,点击[黄]B... QML和C++混合编程实现以下功能:
1. 画面构成:Title,四个Button,一个Rectangle
2. 点击[红]Button,Rectangle显示红色,点击[黄]Button,Rectangle显示黄色,依次类推。
3. C++中公开属性color给Qml使用,代表当前Rectangle的color。
4. 要求在C++中定义Enum值,分别代表红,黄,蓝,绿四个值
[红]和[黄]Button押下时,调用C++的函数,在C++函数中改变Rectangle的颜色。
[蓝]和[绿]Button押下时,在Qml中设置C++里的color属性,在C++的color属性变化的Notify函数中,将当前color(C++)的值设置给Rectangle的color属性。
展开
 我来答
shen90p
推荐于2016-04-11 · TA获得超过251个赞
知道小有建树答主
回答量:205
采纳率:100%
帮助的人:137万
展开全部
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);
qmlRegisterType<MyObj>("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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,单片微型计算机。它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/O)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式