2012-06-05 23 views
0

我想獲得使用Qt和C++的Windows路徑。下面的代碼會編譯,但不會獲取Qt中的windows文件夾路徑。相同的代碼工作在Visual Studio 2010如何獲得Windows路徑使用Qt/C++

 wchar_t path[MAX_PATH]; 
     SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, 0, path); 

下面的代碼變化似乎工作:

 int const bufferSize = 512;   
    QScopedPointer<WCHAR> dirPath(new WCHAR[bufferSize]); 
    ZeroMemory(dirPath.operator ->(), bufferSize); 
    SHGetFolderPath(NULL, CSIDL_WINDOWS, NULL, 0, dirPath.operator ->()); 
+0

「QT」中的含義是什麼? Qt是一個庫,它不像Visual Studio這樣的IDE。您可以將Qt與多種編譯器一起使用,包括Visual Studio使用的Visual C++編譯器。 –

+0

我需要使用QT 4.6.3使用Windows API獲取Windows路徑 – JChan

+1

您是否指Qt Creator IDE?這與Qt不一樣。就目前而言,你的問題與Qt無關。這是Qt,而不是QT。 – Bart

回答

0

我不認爲這是一個特定的Qt功能做到這一點。

最近的是QSysinfo它告訴你的Windows版本。然而,SHGetFolderPath()shoudl在Qt中的工作方式與其他任何win API調用一樣。

PS在安裝Windows Vista>這是替換SHGetKnownFolderPath

+0

這似乎與變量類型的問題wchar_t的路徑[MAX_PATH],我認爲它與QT – JChan

+0

的UNICODE設置可能dependign兼容VS2010中的功能可能不包括在寬字符形式 –

2

沒有Qt的功能,要做到這一點,但你問可以通過讀取environtment變量WINDIR來實現:

QStringList env_list(QProcess::systemEnvironment()); 

int idx = env_list.indexOf(QRegExp("^WINDIR=.*", Qt::CaseInsensitive)); 
if (idx > -1) 
{ 
    QStringList windir = env_list[idx].split('='); 
    qDebug() << "Var : " << windir[0]; 
    qDebug() << "Path: " << windir[1]; 
} 

輸出:

Var : "WINDIR" 
Path: "C:\WINDOWS" 
+0

不一定如果安裝了Windows別的地方(這是可能的嗎?),或者在本地化版本上被調用別的東西。很多人硬編碼「程序文件」,在他們的應用程序,並得到了由64位 –

+0

它咬傷了人,現在發現他們的應用程序是在「程序文件(x86)」。 「Windows」沒有被翻譯? –

+0

我重寫了答案,這是值得檢查出來。也許刪除你的評論也是適當的,因爲它們已經過時了。 – karlphillip

1
QString windowsInstallPath; 

#ifdef Q_WS_WIN 
QDir d; 
if (d.cd("%windir%")) 
    windowsInstallPath = d.absolutePath(); 
#endif 

if (!windowsInstallPath.isNull()) 
    qDebug() << windowsInstallPath; 
else 
    qDebug() << "Not compiled for Windows"; 

應該工作。

0

這裏是一個行的解決方案:

QString winPath = QString::fromUtf8(qgetenv("windir"));

這也可以用於任何環境變量。我不確定qgetenv是否在Qt4中可用,但它是在Qt5中。