QT Creator Erro (páreo para o operador =)
-
22-12-2019 - |
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);
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:
ou
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 =)