Posted on 2011-08-04 21:19
RTY 阅读(799)
评论(0) 编辑 收藏 引用 所属分类:
Qt 、
转载随笔 、
QML
废话不多说直接上代码
((xp下qt4.7 sdk) 出现情况是,当一个类在直接写在一个.h文件上后,在QML中调用会挂掉,我这里出现是在我调用的到处函数是获取一个QString的时候,但是把类分别写成.h和.cpp后,没有出现此 情况,不知道具体的原因)
// main.cpp int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QDeclarativeView view;
view.rootContext()->setContextProperty("ls",new LS);
view.setSource(QUrl::fromLocalFile("../QMLAPP/QMLtest.qml"));
view.show();
return app.exec();
}
// LS.h
#ifndef LS_H#define LS_H
#include <QObject>
#include <QColor>
class LS : public QObject
{
Q_OBJECT
Q_PROPERTY(QColor color READ getColor WRITE setColor NOTIFY colorChange)
public:
LS(QObject *parent = 0);
~LS();
// Q_INVOKABLE 用于导出函数,让qml能使用
Q_INVOKABLE QString getText(void) const;
// 用于属性
QColor getColor(void) const;
void setColor(const QColor &c);
signals:
void sendMsg(const QString &s);
// 用于属性
void colorChange(void);
public slots:
void echoMsg(const QString &s);
private:
QString m_str;
QColor m_Color;
};
#endif // LS_H
//LS.cpp
#include "LS.h" LS::LS(QObject *parent)
:QObject(parent),m_str("I am LS class"),m_Color(Qt::blue)
{
QObject::connect(this, SIGNAL(sendMsg(QString)), this, SLOT(echoMsg(QString)));
}
LS::~LS(){}
QString LS::getText(void) const
{
return m_str;
}
// 用于属性
QColor LS::getColor(void) const
{
return m_Color;
}
void LS::setColor(const QColor &c)
{
m_Color = c;
}
void LS::echoMsg(const QString &s)
{
qDebug(" %s ", s.toLocal8Bit().data());
}
//----------------------------------------------------------------------
// QMLtest.qml
Rectangle{
id: mainrect
width: 400; height: 300;
color: ls.color;
Text {
id: tls;
text: "click this"
}
MouseArea{
anchors.fill: parent;
onClicked: {
tls.text = ls.getText();
ls.sendMsg(" ok ");
}
}
}