qml 中怎么加入一个c中字符串处理函数数

您正在使用IE低版浏览器,为了您的IThao123账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
从qtcreator的实例来简单分析qml的信号与响应函数
从qtcreator的实例来简单分析qml的信号与响应函数
本人小白一枚,近日学习qt,发现很多东西都是从博客上学到,为了向大家分享自己学到的东西另外也可以自己温故知新,所以着手写博客,第一篇是自己今天搞明白的信号与函数,写的不好,大家见谅,以后会有后续的内容,将之前学到的东西做一个总结:
本文代码来源于qt5.2.0 MinGW 32bit 所带的例子,名字是Qml Connecting to C++ Method and Signals:
首先来看qml代码:
import Charts 1.0
import QtQuick 2.0
width: 300; height: 200
PieChart {
id: aPieChart
anchors.centerIn: parent
width: 100; height: 100
color: &red&
onChartCleared: console.log(&The chart has been cleared&)
MouseArea {
anchors.fill: parent
onClicked: aPieChart.clearChart()
anchors { bottom: parent. horizontalCenter: parent.horizontalC bottomMargin: 20 }
text: &Click anywhere to clear the chart&
第一行import了 Chart 1.0,这个是由我们自己定义的,随之而来的是PieChart控件,也是有我们自己定义,然后通过main函数进行注册,这里主要讲信号与槽,就先不说注册的问题了。在PieChart控件中有onChartCleared这个消息,消息ChartCleard触发时相应console.log函数,同样在MouseArea控件中,有Clicked信号,对应我们自己定义的clearChart函数,下边转入信号的声明
//piechart.h
#ifndef PIECHART_H
#define PIECHART_H#include &QtQuick/QQuickPaintedItem&#include &QColor&//![0]class PieChart : public QQuickPaintedItem{//![0]
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(QColor color READ color WRITE setColor)//![1]public://![1]
PieChart(QQuickItem *parent = <span style="color:#);
QString name() const;
void setName(const QString &name);
QColor color() const;
void setColor(const QColor &color);
void paint(QPainter *painter);//![2]
Q_INVOKABLE void clearChart();signals:
void chartCleared();//![2]private:
QString m_name;
QColor m_color;//![3]};//![3]#endif
可以看到信号的声明:signals:
void chartCleared();因为是在PieChart里做的声明,所以在qml里调用的时候必须在PieChart控件里调用,其实到这里一个信号与函数基本上就算定义完成了,可是怎么调用呢,或者说怎么触发信号呢,因为在交互式的程序里都是按钮啊什么的,但是这里没有,就需要我们用到emit了,在qml程序里我们看到MouseArea里边的Onclick信号,这时又qt自己定义的,可以用来响应鼠标点击信号。当信号被触发时,clearChart函数被调用,此函数在piechart.h里声明Q_INVOKABLE void clearChart();在piechart.cpp进行定义
//piechart.cpp#include &piechart.h&#include &QPainter&PieChart::PieChart(QQuickItem *parent)
: QQuickPaintedItem(parent){}QString PieChart::name() const{
return m_name;}void PieChart::setName(const QString &name){
m_name = }QColor PieChart::color() const{
return m_color;}void PieChart::setColor(const QColor &color){
m_color = }void PieChart::paint(QPainter *painter){
QPen pen(m_color, <span style="color:#);
painter-&setPen(pen);
painter-&setRenderHints(QPainter::Antialiasing, true);
painter-&drawPie(boundingRect().adjusted(<span style="color:#, <span style="color:#, -<span style="color:#, -<span style="color:#), <span style="color:# * <span style="color:#, <span style="color:#0 * <span style="color:#);}//![0]void PieChart::clearChart(){
setColor(QColor(Qt::transparent));
emit chartCleared();}从函数定义void PieChart::clearChart(){
setColor(QColor(Qt::transparent));
emit chartCleared();}可以看出,当函数调用时,会执行emit,这时会便会触发chartClear信号,进而响应console.log函数。ok,就这样吧,下边附上main.cpp#include &piechart.h&#include &QtQuick/QQuickView&#include &QGuiApplication&int main(int argc, char *argv[]){
QGuiApplication app(argc, argv);
qmlRegisterType&PieChart&(&Charts&, <span style="color:#, <span style="color:#, &PieChart&);
QQuickView
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl(&qrc:///app.qml&));
view.show();
return app.exec();}
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊是否存在任何JConsole的替代,我可以绑定我的应用程序?
本文地址 :CodeGo.net/2413805/
-------------------------------------------------------------------------------------------------------------------------
1.没有一个真正的答案,但也许有帮助。我刚跨过你的最后一个问题,并认为,这些JConsole的/ JMX的问题仍然与你的插件哈德逊CI工作。我们的想法是对哈德森的UI按钮来启动JConsole的或任何其他管理应用程序。
想着那-哈德森有一个Web界面。哈德森从远程计算机,并按下你的JMX控制台按钮,我敢打赌,启动控制台服务器和客户端端不上 CodeGo.net,因此现有的管理应用程序(Java应用程序)限制了你的插件到单一的哈得孙。或者你去硬盘的方式,整合不仅launch按钮,但还有一个网络接口(基于JMX),允许直接从哈得逊控制台管理服务器。
如果您正在寻找替代线Jmxterm将是一个不错的选择。
它几乎拥有所有JConsole的支持,但没有图形用户界面的函数。
可以得到它从下载JMXTERM这里下载
只要你是快乐与运行Sun只类,可以通过启动JConsole的
java com.sun.jconsole.JConsole
并直接从您的应用程序,因此。只需致电JConsole的的静态main()方法。
Nagios的使用Nagios-JMX-插件
本文标题 :JConsole的替代
本文地址 :CodeGo.net/2413805/
Copyright (C) 2014 CodeGo.net 沪ICP备号 联&系& c&o&d&e&g&o &@&1&2&6&.&c&o&mdxwangtcg 的BLOG
用户名:dxwangtcg
文章数:367
评论数:187
访问量:858860
注册日期:
阅读量:26002
51CTO推荐博文
1.这里主要是介绍,如何在c++中调用QML中的函数和设置QML中的属性的问题
2.具体代码
// UICtest.qml
import Qt 4.7
Rectangle {
width: 640
height: 480
function callbyc(v)
mainWidget.color = v;
return &finish&;
Rectangle{
id: secondR
width: 400;
height: 300;
Rectangle{
width: 30;
height: 40;
color: &#FF035721&
objectName: &NeedFindObj&;
anchors.fill:
// main.cpp
#include &QtGui/QApplication&
#include &QtDeclarative/QDeclarativeView&
#include &QtDeclarative/QDeclarativeEngine&
#include &QtDeclarative/QDeclarativeComponent&
#include &QtDeclarative/QDeclarativeContext&
#include &QtDeclarative/QDeclarativeItem&
#include &QMetaObject&
int main(int argc, char *argv[])
QApplication a(argc, argv);
QDeclarativeView qmlView;
qmlView.setSource(QUrl::fromLocalFile(&../UICtest/UICtest.qml&));
qmlView.show();
// 获取根节点,就是 QML中 id是mainWidget的节点
QDeclarativeItem *item = qobject_cast&QDeclarativeItem*&(qmlView.rootObject());
item-&setProperty(&color&, QVariant(&blue&));
// 查找到我们需要的节点根均objectname NeedFindObj 来获得,并设置他的文本属性
QDeclarativeItem *item1 = item-&findChild&QDeclarativeItem *&(&NeedFindObj&);
if (item1)
item1-&setProperty(&text&, QVariant(&OK&));
// 调用QML中的函数, 分别是 函数所在的对象, 函数名,返回值, 参数
QVariant returnVar;
QVariant arg1 = &blue&;
QMetaObject::invokeMethod(item, &callbyc&,
Q_RETURN_ARG(QVariant, returnVar),Q_ARG(QVariant, arg1));
qDebug(& %s&,returnVar.toString().toLocal8Bit().data());
return a.exec();
这里的根节点是id为mainWidget的矩形元素,那么在C++中获取根节点后就可以,直接的设置他的属性了。其他属性也可以同样,调用指定节点内的函数是通过QMetaObject中的invokeMethod&来进行调用的。
最后所有关于QML和c++交互部分就基本写完,如果想要更多的东西,或者一些其他方法,强烈看看
http://doc./4.7-snapshot/qtbinding.html,或者帮助文档,(究竟是不是我的文档里面没有还是怎么的)
了这篇文章
类别:┆阅读(0)┆评论(0)当前访客身份:游客 [
致力于Python,QML研究。
:请教: 通过qmlRegisterType注册QML类型,然后在Q...
今日访问:0
昨日访问:4
本周访问:16
本月访问:50
所有访问:1878
QML与Python通信
发表于2年前( 18:58)&&
阅读(1412)&|&评论()
0人收藏此文章,
最近在学习QML,但是使用Python3和QML进行通信时出现了问题,我之前发表了一篇博客“关于PyQt5响应QML发送信号的方法?”讲解了QML如何发送信号给Python3,但是从Python3发送信号给QML的问题没解决。
& & 对于Python3和QML通信,实际上就是PyQt5+QML+Python3混合编程,这是必须的,因为QML做图形界面比较容易,但是做功能实现就用Python比较好,虽然QML也能嵌入JavaScript代码进行实现,但是这样话还不如用Python来实现,代码简洁、易懂。
& & 对于以下的例子,参考了如下的连接:
Connecting QML signals in PySide:
PyQt 5.1.1 Reference Guide -& Support for Signals and Slots:
(1)QML显式的调用Python函数
定义一个类,并继承QtCore.QObject对象,并使用@修饰符修饰pyqtSlot
class&MyClass(QObject):
&&&&@pyqtSlot(str)&&&&#&传递参数类型字符串
&&&&def&outputString(self,&string):
&&&&&&&&&&&
&&&&&&&&功能:&创建一个槽
&&&&&&&&参数:&输出的数据string
&&&&&&&&返回值:&无
&&&&&&&&&&&
&&&&&&&&print(string)
创建rootContext对象,并使用setContextProperty(string, object)注册对象,这样在QML中就可以调用这个函数了。
context&=&view.rootContext()
context.setContextProperty(&con&,&con)
如下是一个完整的例子:
这个例子运行后,如果点击鼠标的话,会在控制台打印字符串。
Python3代码:
#&-*-&coding:&GBK&-*-
from&PyQt5.QtCore&import&QUrl,&QObject,&pyqtSlot
from&PyQt5.QtGui&import&QGuiApplication
from&PyQt5.QtQuick&import&QQuickView
class&MyClass(QObject):
&&&&@pyqtSlot(str)&&&&#&输入参数为str类型
&&&&def&outputString(self,&string):
&&&&&&&&&&&
&&&&&&&&功能:&创建一个槽
&&&&&&&&参数:&输出的数据string
&&&&&&&&返回值:&无
&&&&&&&&&&&
&&&&&&&&print(string)
if&__name__&==&'__main__':
&&&&path&=&'test.qml'&&&#&加载的QML文件
&&&&app&=&QGuiApplication([])
&&&&view&=&QQuickView()
&&&&con&=&MyClass()
&&&&context&=&view.rootContext()
&&&&context.setContextProperty(&con&,&con)
&&&&view.engine().quit.connect(app.quit)
&&&&view.setSource(QUrl(path))
&&&&view.show()
&&&&app.exec_()
QML代码(文件名保存为test.qml):
import&QtQuick&2.0
Rectangle&{
&&&&width:&320;&height:&240
&&&&color:&&lightgray&
&&&&Text&{
&&&&&&&&id:&txt
&&&&&&&&text:&&Clicked&me&
&&&&&&&&font.pixelSize:&20
&&&&&&&&anchors.centerIn:&parent
&&&&MouseArea&{
&&&&&&&&id:&mouse_area
&&&&&&&&anchors.fill:&parent&&//&有效区域
&&&&&&&&onClicked:&{
&&&&&&&&&&&con.outputString(&Hello,&Python3&)
运行结果如下:
(2)QML调用Python函数,并返回
这个例子跟上一个相类似,只是这次调用Python的函数具有返回值功能。
以下是一个完整的例子:
运行程序后,点击鼠标,左上角会显示数字30。
Python3代码:
#&-*-&coding:&GBK&-*-
from&PyQt5.QtCore&import&QUrl,&QObject,&pyqtSlot
from&PyQt5.QtGui&import&QGuiApplication
from&PyQt5.QtQuick&import&QQuickView
class&MyClass(QObject):
&&&&@pyqtSlot(int,&result=str)&&&&#&声明为槽,输入参数为int类型,返回值为str类型
&&&&def&returnValue(self,&value):
&&&&&&&&&&&
&&&&&&&&功能:&创建一个槽
&&&&&&&&参数:&整数value
&&&&&&&&返回值:&字符串
&&&&&&&&&&&
&&&&&&&&return&str(value+10)
if&__name__&==&'__main__':
&&&&path&=&'test.qml'&&&#&加载的QML文件
&&&&app&=&QGuiApplication([])
&&&&view&=&QQuickView()
&&&&con&=&MyClass()
&&&&context&=&view.rootContext()
&&&&context.setContextProperty(&con&,&con)
&&&&view.engine().quit.connect(app.quit)
&&&&view.setSource(QUrl(path))
&&&&view.show()
&&&&app.exec_()
QML代码(文件名保存为test.qml):
import&QtQuick&2.0
Rectangle&{
&&&&id:&root
&&&&width:&320;&height:&240
&&&&color:&&lightgray&
&&&&Text&{
&&&&&&&&id:&txt
&&&&&&&&text:&&Clicked&me&
&&&&&&&&font.pixelSize:&20
&&&&&&&&anchors.centerIn:&parent
&&&&Text&{
&&&&&&&&id:&txt1
&&&&&&&&text:&&...&
&&&&&&&&font.pixelSize:&20
&&&&MouseArea&{
&&&&&&&&id:&mouse_area
&&&&&&&&anchors.fill:&parent&&//&有效区域
&&&&&&&&onClicked:&{
&&&&&&&&&&&&console.log(&test...&)&&//&控制台打印信息
&&&&&&&&&&&&txt1.text&=&con.returnValue(20)
运行效果如下:
未点击鼠标时: & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &点击鼠标之后:
(3)QML连接信号到Python
当QML触发事件的时候,发射一个信号给Python,此时Python调用一个函数。
先在QML中定义一个信号,
signal&sendClicked(string&str)&//&定义信号
然后在捕获事件的时候,发射信号,
&MouseArea&{
&&&&&&&&id:&mouse_area
&&&&&&&&anchors.fill:&parent&&//&有效区域
&&&&&&&&onClicked:&{
&&&&&&&&&&&&root.sendClicked(&Hello,&Python3&)&&&&#&发射信号到Python
最后Python中创建一个rootObject对象,然后连接这个对象,
def&outputString(string):
&&&&功能:&输出字符串
&&&&参数:&输出的数据string
&&&&返回值:&无
&&&&print(string)
context&=&view.rootObject()
context.sendClicked.connect(outputString)&&&#&连接QML信号sendCLicked
以下是一个完整的例子:
这个例子中,当点击鼠标的时候,控制台会打印信息。
Python3代码:
#&-*-&coding:&GBK&-*-
from&PyQt5.QtCore&import&QUrl,&pyqtSlot
from&PyQt5.QtGui&import&QGuiApplication
from&PyQt5.QtQuick&import&QQuickView
def&outputString(string):
&&&&功能:&输出字符串
&&&&参数:&输出的数据string
&&&&返回值:&无
&&&&print(string)
if&__name__&==&'__main__':
&&&&path&=&'test.qml'&&&#&加载的QML文件
&&&&app&=&QGuiApplication([])
&&&&view&=&QQuickView()
&&&&view.engine().quit.connect(app.quit)
&&&&view.setSource(QUrl(path))
&&&&view.show()
&&&&context&=&view.rootObject()
&&&&context.sendClicked.connect(outputString)&&&#&连接QML信号sendCLicked
&&&&app.exec_()
QML代码(文件名保存为test.qml):
import&QtQuick&2.0
Rectangle&{
&&&&id:&root
&&&&width:&320;&height:&240
&&&&color:&&lightgray&
&&&&signal&sendClicked(string&str)&//&定义信号
&&&&Text&{
&&&&&&&&id:&txt
&&&&&&&&text:&&Clicked&me&
&&&&&&&&font.pixelSize:&20
&&&&&&&&anchors.centerIn:&parent
&&&&MouseArea&{
&&&&&&&&id:&mouse_area
&&&&&&&&anchors.fill:&parent&&//&有效区域
&&&&&&&&onClicked:&{
&&&&&&&&&&&&root.sendClicked(&Hello,&Python3&)&&&&#&发射信号到Python
运行结果如下:
(4)Python调用QML函数
QML中创建一个函数,
function&updateRotater()&{
&&&&rotater.angle&+=&45
Python中创建一个rootObject对象,并连接这个函数,
root&=&view.rootObject()
timer.timeout.connect(root.updateRotater)
以下是一个完整的例子:
例子中,每隔1s,指针会旋转45&。
Python3代码:
#&-*-&coding:&GBK&-*-
from&PyQt5.QtCore&import&QUrl,&QTimer
from&PyQt5.QtGui&import&QGuiApplication
from&PyQt5.QtQuick&import&QQuickView
if&__name__&==&'__main__':
&&&&path&=&'test.qml'&&&#&加载的QML文件
&&&&app&=&QGuiApplication([])
&&&&view&=&QQuickView()
&&&&view.engine().quit.connect(app.quit)
&&&&view.setSource(QUrl(path))
&&&&view.show()
&&&&timer&=&QTimer()
&&&&timer.start(2000)
&&&&root&=&view.rootObject()
&&&&timer.timeout.connect(root.updateRotater)
&&&&app.exec_()
QML代码(文件名保存为test.qml):&
import&QtQuick&2.0
Rectangle&{
&&&&id:&page
&&&&width:&500;&height:&200
&&&&color:&&lightgray&
&&&&function&updateRotater()&{
&&&&&&&&rotater.angle&+=&45
&&&&Rectangle&{
&&&&&&&&id:&rotater
&&&&&&&&property&real&angle&:&0
&&&&&&&&x:&240;&y:&95
&&&&&&&&width:&100;&height:&5
&&&&&&&&color:&&black&
&&&&&&&&transform:&Rotation&{
&&&&&&&&&&&&origin.x:&10;&origin.y:&5
&&&&&&&&&&&&angle:&rotater.angle
运行结果如下:&
本人水平有限,如果有疏漏之处,欢迎指点。
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读

我要回帖

更多关于 c中字符串处理函数 的文章

 

随机推荐