Qt应用程序只有在从命令行启动时才能正常工作

Qt应用程序只有在从命令行启动时才能正常工作,qt,ubuntu,Qt,Ubuntu,我在Ubuntu12.04上用QtCreator制作了一个非常简单的应用程序。应用程序读取一个xml文件并显示两个图像。但是,当我试图通过双击另一台机器(运行Lubuntu)上的图标来启动应用程序时,不会显示图像,也不会读取xml文件。通过键入./App从命令行启动应用程序时,该应用程序工作正常 为什么它会这样,我该如何修复它 编辑:读取xml的方法: QDomDocument doc("document"); QString path = "datastorage.xml"; // xml i

我在Ubuntu12.04上用QtCreator制作了一个非常简单的应用程序。应用程序读取一个xml文件并显示两个图像。但是,当我试图通过双击另一台机器(运行Lubuntu)上的图标来启动应用程序时,不会显示图像,也不会读取xml文件。通过键入./App从命令行启动应用程序时,该应用程序工作正常

为什么它会这样,我该如何修复它

编辑:读取xml的方法:

QDomDocument doc("document");
QString path = "datastorage.xml"; // xml is in same directory as the executable
QFile xmlFile(path);

if (!xmlFile.open(QIODevice::ReadOnly))
    throw QString("Error with XML: Could not open file " + path);
if (!doc.setContent(&xmlFile)) {
    xmlFile.close();
    throw QString("Error with XML: Could not set QDomDocument content from " + path);
}
xmlFile.close();
QDomElement root = doc.documentElement();
return root;

只需使用相对路径来读取文件,这些路径总是相对于“工作目录”。如果您是从控制台启动应用程序,并且所有必需的文件都在应用程序目录中,那么一切正常。从桌面启动时,工作目录可能不同。只需将QCoreApplication::applicationDirPath()预先添加到您正在使用的所有路径。

只需使用相对路径读取文件,这些路径始终相对于“工作目录”。如果您是从控制台启动应用程序,并且所有必需的文件都在应用程序目录中,那么一切正常。从桌面启动时,工作目录可能不同。只需将QCoreApplication::applicationDirPath()预先添加到您正在使用的所有路径。

似乎是一个路径问题。你能在打开xml文件的地方发布代码吗?你说的“我试图从另一台机器上的桌面可执行文件启动应用程序”是什么意思?@Kalebbederson:我将文件移动到另一台机器上,并试图通过双击应用程序图标来启动它。所以这不是一个桌面快捷方式,我选词不当。似乎是路径问题。你能在打开xml文件的地方发布代码吗?你说的“我试图从另一台机器上的桌面可执行文件启动应用程序”是什么意思?@Kalebbederson:我将文件移动到另一台机器上,并试图通过双击应用程序图标来启动它。因此,这不是桌面快捷方式,我的文字选择很糟糕。这确实起到了作用,但我不认为相对路径会把它搞砸,因为它实际上不是从桌面启动的(我澄清了有关问题),而是从应用程序目录中的图标启动的。工作了,没问题。考虑使用一个文件,而不是自己构建路径。从任何类型的“快捷方式”启动都会更改您的工作目录。尝试从应用程序上方的目录启动应用程序。它也不会起作用。这确实起到了作用,但是我不知道相对路径会如何把它搞砸,因为它实际上不是从桌面启动的(我澄清了这个问题),而是从应用程序目录中的图标启动的。工作了,没问题。考虑使用一个文件,而不是自己构建路径。从任何类型的“快捷方式”启动都会更改您的工作目录。尝试从应用程序上方的目录启动应用程序。这也行不通。