QT创建者错误(与运营商不匹配=)

时间:2014-04-14 04:44:06

标签: c++ qt qtcore qdir qstandardpaths

每次构建代码时都会收到此错误。我正在使用QT Creator 3.1,(5.2.1 build)

  

错误:'operator +'不匹配(操作数类型为'QStringList'和'const char [2]')

这是一段代码,希望它可以提供帮助(asterix行是突出显示错误的地方)

int main(int argc, char *argv[])
{
Shutdown = false;

QApplication a(argc, argv);
a.setApplicationName("aQtLow");

//Create default data paths if they don't exist
QDir Path;
**MainPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation) + "/" + a.applicationName() + "Data";**
Path.setPath(MainPath);

2 个答案:

答案 0 :(得分:2)

问题是你正在尝试将QStringList与QStrings连接起来

QStandardPaths::standardLocations(QStandardPaths::HomeLocation)

返回QStringList

您需要gt您希望重复使用的元素,例如使用.first()方法。你可以这样写:

  

MainPath = QStandardPaths :: standardLocations(QStandardPaths :: HomeLocation).first()+" /" + a.applicationName()+" / Data&#34 ;;

请注意,我刚添加了一个" /"在应用程序名称和"数据"之间因为我认为使用它会更符合逻辑,但如果你愿意,可以随意拒绝编辑。

但是由于您似乎对数据目录位置感兴趣,我建议使用QStandardPaths中的专用枚举:

或者使用它会更好:

  

QStandardPaths :: DataLocation 9返回可以存储持久应用程序数据的目录位置。 QCoreApplication :: organizationName和QCoreApplication :: applicationName附加到为GenericDataLocation返回的目录位置。

你可以写下这个:

QDir Path(QStandardPaths::standardLocations(QStandardPaths::DataLocation).first());

事实上,如果您希望避免.first()来电,您可以使用writableLocation()方法,如下所示:

QDir Path(QStandardPaths::writableLocation(QStandardPaths::DataLocation));

=============================================== ==

出于好奇,这也可能是另一种选择:

  

QString QDir::homePath () [static]

  

QDir QDir::home () [static]

如下:

QDir Path = QDir::home();
Path.cd(a.applicationName() + "Data");

QDir Path(QDir::homePath() + "/" + a.applicationName() + "/Data");

如果这还不够,甚至有one more alternative

QDir Path(QCoreApplication::applicationDirPath + "/Data");

答案 1 :(得分:0)

QStandardPaths :: standardLocations返回QStringList。您应该使用QStringList :: join或QStringList :: at或使用foreach。你想做别的事情,但我不知道是什么因为变量MainPath太神秘了=)