У меня есть проект, написанный с QT. Пока что я тестировал его в Windows без проблем. Сегодня я попытался перенести его в Linux
Я загрузил исходное дерево Qt из qt.gitorius.org. На данный момент он имеет версию 5.2.2. Он скомпилирован и установлен без проблем. Программа также скомпилирована без проблем. Но во время работы была проблема. Во время отладки я обнаружил странное поведение. Вкратце в коде:
Config::Config()
{
p_path = QApplication::applicationDirPath();
if(!p_path.endsWith(QDir::separator())) p_path += QDir::separator();
QString path = p_path + "Settings/config.xml";
settings = new Settings(path,this); // here path is /opt/myprog/Settings/config.xml
}
Settings::Settings(const QString file, QObject * parent) : QObject(parent)
{
p_file = file; // file is empty here!!!!
p_initialized = false;
p_autosave = true;
p_changed = false;
}
Когда я передаю значение QString, функция теряет его значение.
Я проверил тот же код в Windows, и он работает без проблем.
Моя система:
Нет ничего плохого в коде, который вы показываете, за исключением того, что вы хотите передать ссылку на константу, но это не причина проблемы. Конструктор Settings
должен иметь следующую подпись:
Settings::Settings(const QString & file, QObject * parent)
Вы должны повторно запустить qmake в проекте, очистить и перестроить его, и повторите попытку. Если он все еще не работает, тогда у вас есть ошибка памяти, и смена платформы просто вызывает скрытую ошибку в вашем коде.
true
. Некоторые переменные класса выглядят удаленными, но они были созданы и инициализированы ранее. Поэтому, когда я пытаюсь получить это, происходит сбой программы.