首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在qml中连接qml拨号和滑块

在qml中连接qml拨号和滑块
EN

Stack Overflow用户
提问于 2019-09-30 15:09:28
回答 1查看 671关注 0票数 0

我有一个表盘和一个滑块,在mainwindow.cpp中我有:

代码语言:javascript
复制
ui->quickWidget_3->setSource(QUrl("qrc:///slider.qml"));
ui->quickWidget_4->setSource(QUrl("qrc:///dial.qml"));

我要当我移动滑块时..。

我写道:

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtQml>
#include <QtQuick>
#include <QSlider>

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
     ui->setupUi(this);

setStyleSheet("background-color:white");

ui->quickWidget->engine()->rootContext()->setContextProperty("yourObject",ui->horizontalSlider);
ui->quickWidget_2->engine()->rootContext()->setContextProperty("yourObject1",ui->horizontalSlider_3);


QObject* item = ui->quickWidget_3->rootObject();
    QObject::connect(item, SIGNAL(moved()), SLOT(sliderMoved()));



ui->quickWidget_2->setSource(QUrl("qrc:///sl.qml"));
ui->quickWidget->setSource(QUrl("qrc:///qml.qml"));

ui->quickWidget_3->setSource(QUrl("qrc:///slider.qml"));

ui->quickWidget_4->setSource(QUrl("qrc:///dial.qml"));






ui->horizontalSlider->setStyleSheet("QSlider::groove:vertical {background-color:red; position:absolute; left:4px; right: 4px}");
//connect circularGauge e text

}

代码语言:javascript
复制
MainWindow::~MainWindow()
  {
      delete ui;
  }


void MainWindow::on_horizontalSlider_2_sliderMoved(int position)
{
    ui->dial->setValue(position);




}

void MainWindow::sliderMoved()
{
    QObject* slider = ui->quickWidget_3->rootObject();
    QObject* dial = ui->quickWidget_4->rootObject();
     qreal value = QQmlProperty::read(slider, "value").toReal();
    QQmlProperty::write(dial, "value", value);
 }

但这不管用

EN

回答 1

Stack Overflow用户

发布于 2019-10-01 08:44:04

这里有详细的文档说明:从C++与QML对象交互

请在下一次的提问中提供完整的相关工作代码,就像我在这个答案中所做的那样。这样做,你将增加一个答案的机会。

test.pro

代码语言:javascript
复制
QT += core gui widgets quickwidgets quickcontrols2
[...]

dial.qml

代码语言:javascript
复制
import QtQuick.Controls 2.12
Dial {
    id: control
    from: 0
    to: 100
    stepSize: 1
    value: 0
}

slider.qml

代码语言:javascript
复制
import QtQuick.Controls 2.12
Slider {
    id: control
    from: 0
    to: 100
    stepSize: 1
    value: 0
}

mainwindow.h

代码语言:javascript
复制
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    void sliderMoved();
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

代码语言:javascript
复制
#include <QQmlProperty>
#include <QQuickItem>
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->quickWidget_1->setSource(QUrl("qrc:/slider.qml"));
    ui->quickWidget_2->setSource(QUrl("qrc:/dial.qml"));

    QObject* item = ui->quickWidget_1->rootObject();
    QObject::connect(item, SIGNAL(moved()), SLOT(sliderMoved()));
}

void MainWindow::sliderMoved()
{
    QObject* slider = ui->quickWidget_1->rootObject();
    QObject* dial = ui->quickWidget_2->rootObject();
    qreal value = QQmlProperty::read(slider, "value").toReal();
    QQmlProperty::write(dial, "value", value);
}

MainWindow::~MainWindow()
{
    delete ui;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58170666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档