本文介绍在qt c++中修改qml属性的两种方式
1.通知修改方式
2.1 qml定义
Rectangle {
id:hiRect
objectName: "hiTestRect"
anchors.fill: parent
color: "cyan"
Connections{
target: appMainWindow
onNotifyColorChanged:{
hiRect.color = currentColor;
}
}
}
2.2 C++调用代码
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
signals:
void notifyColorChanged(QColor currentColor);
}
void MainWindow::on_actionnotifyChange_triggered()
{
emit notifyColorChanged(Qt::blue);
}
void MainWindow::resizeEvent(QResizeEvent* e)
{
QRect rec = rect();
int iOffset = this->menuBar()->height();
m_pQmlPanel->setGeometry(rec.x(),rec.y()+iOffset,rec.width(),rec.height()-iOffset);
m_pContext->setContextProperty("appMainWindow", this);
}
2.直接操作方式
2.1 qml定义
Rectangle {
id:hiRect
objectName: "hiTestRect"
anchors.fill: parent
color: "cyan"
}
其中objectName用于C++查找标识。
2.2 C++调用代码
QQuickItem* pRootItem = m_pQmlPanel->rootObject();
if (pRootItem){
QObject *pObj = pRootItem->findChild<QObject*>("hiTestRect");
if (pObj){
pObj->setProperty("color","red");
}
}
完整测试样例参见绑定资源