Я реализую простую программу с 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()
но вид всегда слева.
Видимости авторского кода, возможно, недостаточно, но в целом проще установить виджет в макете с определенным выравниванием. Таким образом, вы даете команду виджету находиться на определенной стороне и делаете так, чтобы размещение не зависело от координат / размера виджета хоста и т. Д. 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
Имейте в виду, что остальные горизонтальный макет должен быть заполнен так, с учетом относительных позиций в нем.
Других решений пока нет …