我有像QMLDoubleEdit
这样的组件import QtQuick 1.1
Item{
property double dVal: 0;
Rectangle {
TextInput {
id: textDVal
focus:true
validator:DoubleValidator{
bottom:0;
top:200;
decimals: 3
}
text: dVal
}
}
}
当它用于实现UI时,例如
Item{
property double dWesMax: 0;
property double dWesMin: 0;
Rectangle {
QMLDoubleEdit {
id: edtMaxWes
x: 40
y: 50
dVal: dWesMax
}
QMLDoubleEdit {
id: edtMinWes
x: 260
y: 50
dVal: dWesMin
}
}
}
我可以从我的* .cpp代码中设置它的初始值,但是在更改后我无法读取它们:
//没关系
QDeclarativeContext *context=m_qmlFrmParam->rootContext();
context->setContextProperty("dWesMax",m_wntModule->getWesMax());
//不是
double dVal=0;
dVal=(m_dlgRoot->property("dWesMax")).toDouble();
更好地解释一下: 1)创建UI
void frmWesParam::prepareElements(){
m_qmlFrmParam=new QDeclarativeView();
m_qmlFrmParam->setSource(QUrl("qrc:/view/wesparams/QMLBgPanel.qml"));
m_qmlFrmParam->setResizeMode(QDeclarativeView::SizeRootObjectToView);
m_dlgRoot=m_qmlFrmParam->rootObject();
QDeclarativeContext *context=m_qmlFrmParam->rootContext();
context->setContextProperty("viewerWidget",this);
}
void frmWesParam::setWesMax(double dVal){
m_dlgRoot->setProperty("dWesMax",QString::number(dVal));
}
2)显示它(只是元素行QMLDoubleEdit,两个按钮 - “确定”,“取消”onPress,发出接受或取消)
frmWesParam *vw=new frmWesParam();
vw->setWesMax(14.3);
vw->show();
3)当小部件出现时,它包含我的值 - 14.3。 用户可以在此更改,按下按钮; 4)接受信号接受
void frmWesParam::catchAccept(){
if(m_wntModule!=0){
double dVal=0;
dVal=(m_dlgRoot->property("dWesMax")).toDouble();
qDebug()<<dVal;
}
在这里我只得到了我坐的setWesMax(...)。
答案 0 :(得分:1)
正如我在评论中所说,更改TextInput
中的值不会更改dWesMax
属性。您应该在C ++中阅读text
的{{1}}属性,或者在TextInput
更改时更新dWesMax
。以下是您如何做到这一点的示例:
<强> QMLDoubleEdit 强>
TextInput
用户界面代码
import QtQuick 1.1
Item{
property double dVal: 0;
property var textChangedCb: null;
Rectangle {
TextInput {
id: textDVal
focus:true
validator:DoubleValidator{
bottom:0;
top:200;
decimals: 3
}
text: dVal
onTextChanged: {dVal = text; if (textChangedCb) textChangedCb();}
}
}
这不是最干净的方法,但它可以在不改变C ++代码和QML结构的情况下工作。
答案 1 :(得分:0)
基于W.B的帮助,我得到了另一个解决方案。
UI:
Item{
property alias dWesMax: edtMaxWes.dVal;
property alias dWesMin: edtMinWes.dVal;
Rectangle {
QMLDoubleEdit {
id: edtMaxWes
x: 40
y: 50
}
QMLDoubleEdit {
id: edtMinWes
x: 260
y: 50
}
}
}
QMLDoubleEdit:
Item{
property double dVal: 0;
Rectangle {
TextInput {
id: textDVal
validator:DoubleValidator{
bottom:0;
top:200;
decimals: 3
}
onTextChanged: {
if(text.length>0){
dVal=parseFloat(text);
}
}
}
}
}