-1

I have the following code:

Tabs {
    Tab {
        id: financialDetailsTab
        title: i18n.tr("Financial Details")
        page: Qt.resolvedUrl("FinancialDetails.qml")
    }
    Tab {
        id: monthlyBudgetTab
        title: i18n.tr("Monthly Budget")
        page: Qt.resolvedUrl("MonthlyBudget.qml")
    }
    Tab {
        id: annualBudgetTab
        title: i18n.tr("Annual Budget")
        page: Qt.resolvedUrl("AnnualBudget.qml")
    }
    Tab {
        id: savingsGoalsTab
        title: i18n.tr("Savings Goals")
        page: Qt.resolvedUrl("SavingsGoals.qml")
    }
}

which is generating the following errors:

Unable to assign QString to QQuickItem*
Unable to assign QString to QQuickItem*
Unable to assign QString to QQuickItem*
Unable to assign QString to QQuickItem*

on the lines where Qt::resolvedUrl is being used. The Tabs component is a part of the Ubuntu SDK, and not Qt Quick, and the only example of it's use doesn't provide much insight into the problem.

I've added the exact same lines as properties of the MainView, outside of the Tabs component, and the problem has not been evident there, leading me to believe the issue lies with the Ubuntu component. While the problem may be with the Ubuntu component, some help in understanding what the error message actually means would be helpful.

  • Try importing those files (`import "MonthlyBudget.qml"`) and reference it directly on the page element. – Salem Mar 24 '13 at 14:48
  • Just tried it, didn't help. –  Mar 24 '13 at 15:04
  • The error message from QML engine is quite clear : 'page' property wants a QtQuick.Item value, and Qt.resolvedUrl() returns a `string`. – TheBootroo Mar 27 '13 at 10:42

1 Answers1

2

The error you are getting means that the 'page' property from Tab { } item can't accept a string (or url) content, it wants an Item or derived component.

So I'm pretty sure your AnnualBudget or SavingsGoals files can be instanciated as components, since they are in the same folder (so no import needed) and the file name first letter is uppercase so QML engine automatically allows you to do this :

Tabs {
    Tab {
        id: financialDetailsTab
        title: i18n.tr("Financial Details")
        page: financePage;
    }
}

FinancialDetails {
    id: financePage;
}

So 'financePage' is an ID, so for the QML engine it's a QQuickItem pointer and it will accept it. Just do the same for each tab/page pair.

TheBootroo
  • 7,408
  • 2
  • 31
  • 43