2014-10-20 19 views
0

我已經搜索並閱讀了許多其他與啓動Qt程序(現在只在Windows中)相關的文章。他們對「正常」計劃有幫助。我現在有以下代碼,它與系統托盤菜單中的可選項一起使用:在登錄時啓動Qt程序,需要「開始」文件夾集

`void MainWindow::setAutoStartup() 
{ 
    QSettings settings(win_autostart_path,QSettings::NativeFormat); 
    if (autoStartAction->isChecked()) { 
     QString thePath = appPath.replace('/','\\'); 
     thePath += QDir::separator(); 
     thePath += app_name; 
     thePath += ".exe"; 
     settings.setValue(app_name, thePath); 
    } else { 
     settings.remove(app_name); 
    } 
}` 

該代碼確實有效。我向註冊表中添加或刪除正確的條目,並在登錄後啓動exe。但是,這是一個Qt HTML5項目,因此在可執行文件旁邊還有一個html文件夾。使用安裝程序創建的快捷方式,它可以工作,因爲在設置到程序目錄的快捷方式「開始於:」中有一個參數。然而,註冊表項以空白/白色屏幕啓動程序,因爲它找不到html文件夾,「start in」必須位於註冊表項的其他位置。 如果我將其中一個快捷方式複製到啓動文件夾,它的確可以正確啓動,因爲該快捷方式的「開始位置:」值設置。 所以...... 選擇a)任何人都知道是否有一個「開始」參數與reg條目一起使用?我已經找遍了,找不到這樣的東西 選擇b)任何人都有一個如何用下面的代碼替換下面的例子,添加刪除啓動文件夾的快捷方式?我在許多相關的主題中看到這是一個替代,但沒有一個例子。 謝謝! :)

回答

0

當Qt創建者生成一個HTML 5應用,源包含以下初始化線:

viewer.loadFile(QLatin1String("html/index.html")); 

的問題是,該路徑是相對的,取決於過程工作目錄(I假設「開始「是指它)。當工作目錄不在應用程序的目錄中時,應用程序無法正常工作是很糟糕的。如果一個正確的應用程序不直接影響其功能,它應該可以與任何工作目錄一起使用您遇到問題,因爲工作目錄在啓動時設置在別處。

您需要修改代碼,以便它使用絕對路徑來加載資源。如果html/index.html與可執行文件位於同一目錄中,則可以使用以下代碼構建它的絕對路徑:

QString path = QDir(QApplication::applicationDirPath()).absoluteFilePath(
    QLatin1String("html/index.html")); 
viewer.loadFile(path); 
相關問題