簡體   English   中英

連接 qml 表盤和 qml 中的 slider

[英]Connections qml dial and slider in qml

我有一個表盤和一個 slider,在 mainwindow.cpp 我有:

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

我希望當我移動 slider 撥盤移動時..


我寫:

#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

}

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);
 }

但它不起作用

這里有很好的記錄: Interacting with QML Objects from C++

下次請嘗試在您的問題中提供完整的相關工作代碼,就像我將在此答案中所做的那樣。 這樣做,你會增加回答的機會。

test.pro

QT += core gui widgets quickwidgets quickcontrols2
[...]

撥號.qml

import QtQuick.Controls 2.12
Dial {
    id: control
    from: 0
    to: 100
    stepSize: 1
    value: 0
}

slider.qml

import QtQuick.Controls 2.12
Slider {
    id: control
    from: 0
    to: 100
    stepSize: 1
    value: 0
}

主窗口.h

#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

主窗口.cpp

#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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM