2
第一個問題在這裏,請耐心等待。切換QDeclarativeView的來源
我一直試圖創建一個QMainWindow使用QDeclarativeView作爲畫布的視圖,但每當我嘗試切換QDeclarativeView的源我的程序段錯誤,我坦率地不知道爲什麼,或者如何解決它。
這是我的swapView()函數。
void MainWindow::swapView(int view)
{
switch (view)
{
case 0:
cout << "Switching to Slideshow..." << endl;
this->setSource("Slideshow.qml");
break;
case 1:
cout << "Switching to Main Canvas..." << endl;
this->setSource("Test.qml");
cout << "Successfully switched to Main Canvas!" << endl;
break;
}
}
這裏是它調用的SetSource()方法:
void MainWindow::setSource(QString fileName)
{
this->ui->declarativeView->setSource(QUrl::fromLocalFile("Test.qml"));
}
我試圖替換上面與下面的代碼的代碼,它擺脫了段錯誤的,但每個窗口在打開一個單獨的窗口,而不是隻替換QDeclarativeView上的視圖。
void MainWindow::setSource(QString fileName)
{
QDeclarativeView *view = new QDeclarativeView;
view->setSource(QUrl::fromLocalFile(fileName));
ui->declarativeView = view;
ui->declarativeView->show();
}
如果任何人有我做錯了任何輸入(我敢肯定,這是愚蠢的東西),請讓我知道...
感謝。
嘗試使臨時測試變量'QUrl溫度= QUrl :: fromLocalFile( 「Test.qml」 );',看看它是否有效'temp.isValid()' - 也許這是問題之一?你發佈的代碼看起來很好,除非我錯過了一些東西。 – tmpearce 2012-02-29 01:40:39
我按照您的建議使用了第二版的代碼,並且它每次都創建一個完全新窗口,並且它打印出提供的QUrl是有效的。 使用代碼的第一個版本,它的功能與最初使用有效的QUrl相同。加載第一個視圖很好,但後來segfaults當我嘗試加載第二個 – Tjsail33 2012-02-29 01:46:52
我試過這段代碼,void switchView()if(view-> source()== QUrl(「qrc:/Rect.qml」)) {set_ource(QUrl(「qrc:/main.qml」)); (QUAR1(「qrc:/Rect.qml」));其他{0} } },它工作正常,什麼是segfault的來源? – Kunal 2012-02-29 04:01:45