Próbuję dodać nową kartę do składnika tabs z poniższym kodem.
Podczas działania nie jest zgłaszany błąd, ale nie są wyświetlane żadne dodatkowe zakładki. Próbowałem użyć zarówno kart, jak i kart .__ tabsModel jako element nadrzędny, ale nie są wyświetlane żadne dodatkowe karty.
import QtQuick 2.0
import QtQuick.LocalStorage 2.0
import Ubuntu.Components 0.1
MainView {
// objectName for functional testing purposes (autopilot-qt5)
id: mainView
objectName: "mainView"
applicationName: "news-feed"
width: units.gu(100)
height: units.gu(75)
Tabs {
id: tabs
anchors.fill: parent
Component.onCompleted: {
mainView.initializeDB();
mainView.saveFeed("BBC News","http://feeds.bbci.co.uk/news/rss.xml");
mainView.saveFeed("Jono Bacon","http://www.jonobacon.org/?feed=rss2");
mainView.saveFeed("The Register", "http://www.theregister.co.uk/headlines.atom");
fillTabs();
}
tools: ToolbarActions {
Action {
objectName: "action"
iconSource: Qt.resolvedUrl("avatar.png")
text: i18n.tr("Tap me!")
onTriggered: {
label.text = i18n.tr("Toolbar tapped")
}
}
}
// First tab begins here
Tab {
id: tabFrontPage
objectName: "tabFrontPage"
title: i18n.tr("Front Page")
// Tab content begins here
page: Page {
Column {
anchors.centerIn: parent
Label {
id: labelFrontPage
text: i18n.tr("This will be the front page \n An aggregation of the top stories from each feed")
}
}
}
}
}
function fillTabs() {
var db = getDatabase();
db.transaction(function(tx) {
var rs = tx.executeSql('SELECT * FROM feeds;');
if (rs.rows.length > 0) {
for(var i = 0; i < rs.rows.length; i++) {
var feedTab = Qt.createQmlObject('import QtQuick 2.0;import Ubuntu.Components 0.1;Tab {anchors.fill: parent;objectName: "Tab";title: i18n.tr("Tab");page: Page {anchors.margins: units.gu(2);Column {anchors.centerIn: parent;Label {id: label;objectName: "label";text: i18n.tr("Tab");}}}}',tabs,"feedTab");
}
} else {
res = "Unknown";
}
})
}
//Storage API
function getDatabase() {
return LocalStorage.openDatabaseSync("news-feed","1.0","StorageDatabase",10000)
}
//Initialise DB tables if not already existing
function initializeDB() {
var db = getDatabase();
db.transaction(function(tx) {
//Create settings table if not existing
tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');
tx.executeSql('CREATE TABLE IF NOT EXISTS feeds(feedName TEXT UNIQUE, feedURL TEXT UNIQUE)')
});
}
//Write setting to DB
function setSetting(setting,value){
//setting: string - setting name (key)
//value: string - value
var db = getDatabase();
var res = "";
db.transaction(function(tx) {
var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);',[setting,value]);
//console.log(rs.rowsAffected)
if(rs.rowsAffected > 0) {
res = "OK";
} else {
res = "Error";
}
})
return res;
}
//Read setting from DB
function getSetting(setting) {
var db = getDatabase();
var res="";
db.transaction(function(tx) {
var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);
if (rs.rows.length > 0) {
res = rs.rows.item(0).value;
} else {
res = "Unknown";
}
})
return res;
}
function saveFeed(feedName, feedURL) {
var db = getDatabase();
var res = "";
db.transaction(function(tx){
var rs = tx.executeSql('INSERT OR REPLACE INTO feeds VALUES (?,?)',[feedName,feedURL]);
//console.log(rs.rowsAffected)
if (rs.rowsAffected > 0) {
res = "OK";
} else {
res = "Error";
}
})
return res;
}
//Return a single feed
function getFeed(feedName) {
var db = getDatabase();
var res = "";
db.transaction(function(tx) {
var rs = tx.executeSql('SELECT feedURL FROM feeds WHERE feedName=?;', [feedName]);
if (rs.rows.length > 0) {
res = rs.rows.item(0).feedURL;
} else {
res = "Unknown";
}
})
return res;
}
//Return all feeds and urls
function getFeeds() {
var db = getDatabase();
var res = "";
db.transaction(function(tx) {
var rs = tx.executeSql('SELECT * FROM feeds;');
if (rs.rows.length > 0) {
return rs;
} else {
res = "Unknown";
}
})
return res;
}
}
application-development
ubuntu-touch
qml
ubuntu-sdk
Morchuboo
źródło
źródło
Odpowiedzi:
Obawiam się, że dynamiczne dodawanie kart nie jest obecnie możliwe
Zespół SDK powiedział mi, że jest to ograniczenie typu VisualItemModel (którego używa składnik Tabs ), ponieważ nie pozwala on na dynamiczne dodawanie elementów potomnych.
Istnieje otwarty błąd do śledzenia tego problemu .
źródło
Oto przykładowe obejście.
Ta metoda powoduje, że prawie wszystkie gui są określone w ciągu i szybko stają się nieporządne, ale będą działać, dopóki funkcja dołączania do VisualItemModel nie zostanie zaimplementowana w górę.
To jest początek czytnika rss, z którym majstruję. Jeśli wkleisz go do pustego pliku qml, powinien działać poprawnie. (być może trzeba zainstalować libqt5sql5-sqlite i qtdeclarative5-localstorage-plugin. Są one na obrazach telefonu, ale nie zostały zainstalowane przy instalacji SDK).
źródło