2011-06-29 46 views
1

我已經在Qt中創建快捷的項目,在開始從嚮導中選擇,當Qt Creator的開始。 Qt創建者創建項目。主項目中有qmlapplicationvierwer子項目和qml文件。我要添加新的cpp源文件和頭文件(MainMenu.cpp和MainMenu.h)項目,然後從main.qml文件這些文件的調用函數。 我怎麼能在qmlapplicationviewer註冊新的類型,並從ManiMenu調用函數?Qt快速項目 - 如何在qml文件中調用cpp函數?

qmlapplicationvierwer只有幾個功能:

的QApplication應用程式(的argc,argv的);

QmlApplicationViewer viewer; 
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); 
viewer.setMainQmlFile(QLatin1String("qml/PUTest/main.qml")); 
viewer.showExpanded(); 

return app.exec(); 

和:

viewer.addImportPath(const string &path); 

更好的辦法,而不項目嚮導未創建的項目?

感謝

回答

5

通常情況下,可以使用此嚮導來創建QML唯一項目。 的QmlApplication觀衆在你的QML文件只是一個輕量級的C++包裝這麼一個二進制生成和QML文件被加載。

沒有太多的魔法做你自己,請參閱:

http://doc.qt.nokia.com/qt-maemo-4.7/qtbinding.html

#include <QApplication> 
#include <QDeclarativeView> 
#include <QDeclarativeContext> 

int main(int argc, char *argv[]) 
{ 
QApplication app(argc, argv); 

QDeclarativeView view; 
QDeclarativeContext *context = view.rootContext(); 
context->setContextProperty("backgroundColor", 
          QColor(Qt::yellow)); 

view.setSource(QUrl::fromLocalFile("main.qml")); 
view.show(); 

return app.exec(); 
} 

並與setContextProperty您可以通過CPP廣告全球QML類型...

當然你也可以重用QmlApplicationViewer。該Mainclass QmlApplicationViewer從QDeclarativeView得來,所以您可以直接訪問這個類中的上下文。

所以,像在上面的例子中,它應該是可以使用:

QDeclarativeContext *context = this.rootContext(); 
context->setContextProperty("backgroundColor", QColor(Qt::yellow)); 

某處QmlApplicationViewer costructor或之後(沒有嘗試,現在,讓我知道,如果它不工作)。

+0

好,感謝它的工作原理:) – Robert

+1

下一步將接受答案,如果這個工作對你:-) – Marco