2016-03-07 12 views
-1

У меня есть QQuickWidget. Я хотел бы сделать его автозависимым в соответствии с его содержимым QML и предоставить как горизонтальные, так и вертикальные полосы прокрутки в случае, если его содержимое не может соответствовать окну.Использование QScrollArea с QQuickWidget

Я положил QQuickWidget внутри QScrollArea и добавил макет к QScrollArea, чтобы сделать QQuickWidget, чтобы заполнить его. В родительском окне конструктора я добавил строку:

scroll_area->setWidget(quick_widget);

Однако полосы прокрутки не доступны, независимо от размера QML контента. Как настроить QQuickWidget и QScrollArea на работу так, как мне нужно?

UPDATE1: Ну, я пытаюсь сделать это через QDesigner. Фактический XML пользовательского интерфейса:

<widget class="QScrollArea" name="scroll_area"> 
<property name="sizePolicy"> 
    <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> 
    <horstretch>0</horstretch> 
    <verstretch>0</verstretch> 
    </sizepolicy> 
</property> 
<property name="widgetResizable"> 
    <bool>true</bool> 
</property> 
<widget class="QQuickWidget" name="quick_widget"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>502</width> 
    <height>269</height> 
    </rect> 
    </property> 
    <property name="sizePolicy"> 
    <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> 
    <horstretch>0</horstretch> 
    <verstretch>0</verstretch> 
    </sizepolicy> 
    </property> 
    <property name="resizeMode"> 
    <enum>QQuickWidget::SizeViewToRootObject</enum> 
    </property> 
    <property name="source"> 
    <url> 
    <string>…</string> 
    </url> 
    </property> 
</widget> 
</widget> 

И во время отладки я могу видеть, что QScrollArea.widget() был уже установлен в quick_widget (без scroll_area.setWidget силы вызова()), но все еще есть не скроллбары доступны, даже когда содержимое quick_widget не может соответствовать его размеру.

UPDATE2: Возможно, проблема связана с тем, что элементы добавляются динамически. И, возможно, высота и ширина корневой объект должен быть изменен вручную (или они не должны?) Например:

if (object.x + object.width > root.width) 
    root.width = object.x + object.width; 
if (object.y + object.height > root.height) 
    root.height = object.y + object.height; 

ответ

1

Я попытался следующий код, и он работает отлично.

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

    auto scrollArea = new QScrollArea(); 
    setCentralWidget(scrollArea); 

    auto quickWidget = new QQuickWidget(); 
    quickWidget->setSource(QUrl("qrc:/main.qml")); 
    quickWidget->setResizeMode(QQuickWidget::SizeViewToRootObject); 
    scrollArea->setWidget(quickWidget); 
} 
//main.qml 
//a varying Rectangle 
import QtQuick 2.0 

Rectangle { 
    id: root ;color: "red"; width: 400; height: 500 
    Timer{ 
     id: timer 
     property real time 
     interval: 400 
     repeat: true 
     onTriggered: { 
      root.width = 800 + Math.sin(time*100) *100 
      time = time + 1; 
      console.log(time) 
     } 
    } 

    Component.onCompleted: { 
     timer.time = 0 
     timer.start() 
    } 
} 

When the root retangle is small

When the root retangle is big

 Смежные вопросы

  • Нет связанных вопросов^_^