Qml/Qt/C++: QQuickView в виджете, не может получить правильную позицию
Я реализую простую программу с QT5.5, которая содержит окно HTML (QWebview), как на следующем снимке экрана:
Теперь я хочу, чтобы программа также была установлена для iOS, например, для iPad. Я обнаружил, что класс QWebview недоступен для мобильной системы, поэтому мне пришлось изменить свое окно HTML на QQuickView с файлами QML (или есть лучший способ?). Я нашел следующий код онлайн:
QQuickView *view = new QQuickView();
QWidget *container = QWidget::createWindowContainer(view, this);
container->setMinimumSize(200,400);
container->setMaximumSize(200,400);
container->setFocusPolicy(Qt::TabFocus);
view->setSource(QUrl("qrc:///webview.qml"));
layout->addWidget(container);
Затем я добавил контейнер в главное окно. Webview.qml:
import QtQuick 2.5
import QtWebView 1.0
Rectangle {
id: rectangle
width: 200
height: 400
WebView {
id: webview
url: "file:///test.html"
anchors.fill: parent
width: 200
height: 400
}
}
Но почему-то я не могу сделать верный макет. Окно HTML в iOS За контейнером находится пустой / белый прямоугольник, и контейнер также не находится в окне HTML справа от того места, где он должен быть. Когда я изменяю ширину и высоту прямоугольника в файле qml, он изменяет только размер веб-просмотра, а не белый фон.
Может кто-нибудь сказать мне, как я могу сделать это правильно? Я также использовал container->setParent()
но вид всегда слева.
1 ответ
Видимости авторского кода, возможно, недостаточно, но в целом проще установить виджет в макете с определенным выравниванием. Таким образом, вы даете команду виджету находиться на определенной стороне и делаете так, чтобы размещение не зависело от координат / размера виджета хоста и т. Д. layout
переменная предполагается горизонтальной рамкой или QHBoxLayout.
// make sure that QHBoxLayout* layout = new QHBoxLayout(this);
// or set the horizontal layout somehow else
QQuickView *view = new QQuickView();
QWidget *container = QWidget::createWindowContainer(view, this);
container->serFixedWidth(200); // the layout is horizontal
// and we *may* want to fix the width
container->setFocusPolicy(Qt::TabFocus);
view->setSource(QUrl("qrc:///webview.qml"));
layout->addWidget(container, Qt::AlignRight); // align to the right
Имейте в виду, что оставшаяся часть горизонтальной компоновки должна быть заполнена с учетом относительных положений в ней.