Pergunta

Estou recebendo este erro toda vez que eu construir o meu código.Eu estou usando o QT Creator 3.1, (5.2.1 compilação)

erro:nenhuma correspondência para o operador+' (tipos de operando são 'QStringList' e 'const char [2]')

Aqui é um trecho de código, espero que possa ajudar (o asterix linha onde o erro está em destaque)

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);
Foi útil?

Solução

O problema é que você está tentando concatenar uma QStringList com QStrings desde

QStandardPaths::standardLocations(QStandardPaths::HomeLocation)

retorna um QStringList.

Você precisa gt o elemento que você deseja reutilizar, por exemplo,usando o .first() o método.Você poderia escrever isso:

MainPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).primeiro() + "/" + um.applicationName() + "/Dados";

Note que eu acabei de adicionar uma falta "/" entre o nome do aplicativo e os "Dados", porque eu acho que seria mais lógico usar, mas sinta-se livre para rejeitar a edição, se você desejar.

Mas já que você parece estar interessado na localização do directório de dados, gostaria de sugerir para uso dedicado de enum QStandardPaths:

ou seria ainda melhor usar apenas:

QStandardPaths::DataLocation 9 Retorna um diretório local onde persistente de dados do aplicativo podem ser armazenados.QCoreApplication::organizationName e QCoreApplication::applicationName são acrescentados para o local do diretório retornou para GenericDataLocation.

Você poderia escrever isto então:

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

Na verdade, se você deseja evitar a .first() chamada, você provavelmente poderia usar o writableLocation() método da seguinte forma:

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

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

Por curiosidade, este pode ser também uma alternativa:

QString QDir::homePath () [estática]

ou

QDir QDir::casa () [estática]

como segue:

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

ou

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

Se isso não for o suficiente, ainda há mais uma alternativa.:

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

Outras dicas

QStandardPaths::standardLocations retorno QStringList.Você deve usar QStringList::aderir ou QStringList::ou usar o foreach.Mb que você deseja fazer outra coisa, mas eu não sei o que, porque variável MainPath tão misterioso =)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top