我正在用QT5.5实现一个简单的程序,它包含一个HTML窗口(QWebview),如以下屏幕截图所示:
右侧的HTML窗口
现在我希望该程序也安装在iOS上,例如iPad。我发现QWebview类不适用于移动系统,所以我不得不用QML文件将HTML窗口更改为QQuickView(或者有更好的方法吗?)。我在网上找到了以下代码:
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
}
}
但不知怎么的,我没能把布局做好。iOS上的HTML窗口容器后面有一个空白/白色的矩形,容器也不在右侧的HTML窗口中。当我在qml文件中更改矩形的宽度和高度时,它只更改Web视图的大小,而不是白色背景。
有人能告诉我,我该怎么做?我也使用过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
请注意,水平布局的其余部分应该像这样填充,并考虑其中的相对位置。