Странная ошибка в qml и oxyde
Я сделал приложение с этим исходным кодом: http://pastebin.com/zMwtusZJ Однако, когда я пытаюсь запустить приложение, веб-представление вместо этого становится черным и не загружает веб-страницу.
Вот вывод аварии: http://pastebin.com/AjDjadEP
Когда я определяю ширину для элемента webview с помощью чего-то вроде ->width:units.gu(160), тогда это работает просто отлично. Однако, если это возможно, я бы предпочел, чтобы он использовал полную высоту родительского элемента.
Вот исправленный и улучшенный источник: http://pastebin.com/6UyMF9Tb
1 ответ
Я не смог воспроизвести вашу проблему, но когда я запустил ваш образец, я вообще не видел веб-просмотра. Мне кажется, что ваше позиционирование очень запутано. У вас есть столбец, содержащий одну строку, которая содержит другой столбец. Это на самом деле не имеет смысла. Он скрыт неправильным отступом, поэтому первое, что нужно сделать, это очистить код перед публикацией. Это не только поможет тем, кто пытается вам помочь, вы можете обнаружить проблему в процессе.
Вы смешиваете позиционирование путем явного определения размера и привязки. Например, ваш внешний столбец имеет ширину, установленную явно и неявно, через атрибут anchor.fill. Вы знаете, кто победит, если они не согласны? Я уверен, что нет.
Вдоль аналогичной линии вы устанавливаете ширину WebView равной ширине его родителя, Row. Но строка должна быть достаточно широкой, чтобы вместить всех ее дочерних элементов, поэтому она должна быть шире, чем WebView. Как QML разрешает это? Я не знаю. Я считаю Row и Column хорошими для размещения нескольких элементов известного размера, но не для хранения элементов, которые должны занимать оставшееся пространство. Если это то, что вы хотите, делайте это явно или с помощью якорей.
Ниже я переписал ваш пример кода в форму, которая работает для меня. Я не знаю, что это был макет, который вы пытались использовать, но, надеюсь, он достаточно понятен, чтобы вы могли изменить его так, как считаете нужным.
Я решил поместить запись URL и кнопки в строку, так как все они имеют фиксированный размер. WebView должен занимать оставшееся пространство, поэтому я привязываю его верх к нижней части строки (с полем в 1 гу) и его нижнюю часть к нижней части страницы. Установка его ширины в ширину страницы гарантирует, что он достигает всего поперечного сечения, хотя это также можно было бы сделать с помощью якорей.
import QtQuick 2.0
import Ubuntu.Components 1.1
import com.canonical.Oxide 1.0
import QtQuick.Window 2.0
MainView {
applicationName: "com.ubuntu.developer.mkamenjak77.bugapp"
useDeprecatedToolbar: false
width: Screen.width/2
height: Screen.height/2
Page {
Row{
id: controlRow
TextField {
id: textfield
text: "http://google.com"
width: units.gu(40)
Keys.onReturnPressed: {
if (textfield.text.substring(0, 7) != "http://")
textfield.text = "http://" + textfield.text;
webview.url = textfield.text
}
}
Button {
width: units.gu(10)
text: i18n.tr("Osvježi")
onClicked: webview.reload()
}
Button {
width: units.gu(10)
text: i18n.tr("Naprijed")
onClicked: webview.goForward()
}
Button {
width: units.gu(10)
text: i18n.tr("Natrag")
onClicked: webview.goBack()
}
}
WebView {
id: webview
width: parent.width
anchors.top: controlRow.bottom
anchors.topMargin: units.gu(1)
anchors.bottom: parent.bottom
Component.onCompleted: {
url = textfield.text
}
}
}
}