Ни исходный код проекта, ни исходный код библиотеки не менялись до возникновения проблемы. Очевидная проблема в любом приложении не такая же, как в другом приложении, но, похоже, основная причина та же.
До появления проблем я установил cygwin с установка по умолчанию, за исключением добавления g++, очистки решения и повторной сборки, поэтому я считаю, что вероятным виновником является установка cygwin. В переменных PATH нет видимых изменений. С тех пор я удалил Cygwin, но проблема(ы) сохраняется.
При запуске тестового проекта я получаю сообщение о нарушении доступа на чтение.
Пожалуйста, посмотрите следующий код из проект модульного/регрессионного тестирования:
Код: Выделить всё
void TradeToolsTest::initTestCase(void)
{
QSharedPointer spy = TradeToolsTest::parentLists->getUnderlyingAsset("SPY");
QSharedPointer bar30 = QSharedPointer(new QMap);
// Convert the bars from JSON to a list of Bars
QSharedPointer tempBar = api->jsonArrayToItemArray(this->mockData["bars"]["spy"]["minute"]["30"].array(), (processJSONObject)TradeTools::Financial::jsonToBar, TradeToolsTest::parentLists);
// Insert the bars into the expected container type
for(QVector::iterator itBar=tempBar->begin(), endBar=tempBar->end(); itBar!=endBar; itBar++)
bar30->insert((*itBar)->timestamp, *itBar);
// Add the bars to the asset
spy->addBars(timeframe30, bar30, TradeToolsTest::state, adequateBarCount, TradeToolsTest::parentLists, TradeToolsTest::internalComm, TradeToolsTest::barAdded);
}
bool OQIAsset::addBars(const BarTime barTime, const QSharedPointer bar, const QSharedPointer appState, bool &adequateBarCount, const QSharedPointer
parentLists, const QSharedPointer internalComm, const BarAdded realBarAdded)
{
return TradeTools::Financial::addBars(this, barTime, bar, this->strikeIncrement, appState, adequateBarCount, parentLists, internalComm, realBarAdded);
}
Выше приведена минимальная версия кода, объясняющая проблему.
Если мне установить точку останова в операторе return внутри функции OQIAsset::addBars и добавить bar.value в окно просмотра, свойство QMap::size будет иметь огромное значение , вместо ожидаемое значение «200». Когда я перемещаюсь назад по стеку вызовов к вызывающей функции «TradeToolsTest::initTestCase» и добавляю «bar30.value» в окно просмотра, свойство QMap::size равно «200», как и ожидалось. Указатель общего объекта имеет тот же адрес.

< /p>
Типы объектов те же, за исключением того, что тип вызываемой функции — const. Удаление const приводит к той же проблеме. Я сомневался, что это решит проблему, поскольку ее не было. изменения кода до проблемы появляется.
Проблема приложения торгового бота заключается в том, что библиотека Qt ошибочно полагает, что экземпляр QApplication не был создан до создания экземпляра QWidget. См. следующий код:
Код: Выделить всё
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Systematic w;
w.show();
return a.exec();
}
Systematic::Systematic(QWidget *parent)
: QMainWindow(parent)
{
Systematic::initUI();
}
void Systematic::initUI(void)
{
Systematic::profitLossChart = new LineChartView;
}
[img]https:/ /i.sstatic.net/oJX3sxNA.png[/img]
Версия Visual Studio: Community 2022 17.12.3
Версия Qt: 6.8.1, использование msvc2022_64
ОС: Windows 11
Я обновил Qt с 6.7.2 до 6.8.1 и обновил Visual Studio до последней версии, но проблемы по-прежнему сохраняются.
Как упоминалось выше, я очистил и пересобрал решение (включая ручное удаление папок debug/x64 из каталог проекта.), я удалил cygwin и проверил переменные PATH на наличие очевидных новых записей.
Я ценю любую помощь, которую вы можете предоставить.
Подробнее здесь: https://stackoverflow.com/questions/792 ... rpretation
Мобильная версия