Почему в Qt установка таблицы стилей QPushButton постоянно увеличивает выделение памяти? ⇐ C++
Почему в Qt установка таблицы стилей QPushButton постоянно увеличивает выделение памяти?
Я использую Visual Studio 2022, последние версии ISO для C и C++ и Qt. У меня есть файлы заголовков и файлы библиотеки, связанные с моим решением (файлы .lib связаны с решением, а файлы .dll находятся внутри каталога, где находятся исполняемые файлы). ).
Я работаю над своим проектом уже несколько месяцев. Оно стало сложным. Я понял, что у меня есть часть моего проекта, которая постоянно выделяет память в оперативной памяти каждый раз, когда ее вызывают. Несмотря на сложность, я отследил проблему, связанную с настройкой таблицы стилей объектов QPushButton, например: qPushButton.setStylesheet("background-color: green;") .
Вот мой минимальный пример:
#include #include #include #include #include void test(int argc, char* argv[]) { // Инициализируем Qt QApplication::setStyle(QStyleFactory::create("Fusion")); QApplication qApplication = QApplication(argc, argv); QDialog qDialog = QDialog(nullptr); QHBoxLayout qHBoxLayout = QHBoxLayout(&qDialog); qDialog.setLayout(&qHBoxLayout); QPushButton qPushButton1 = QPushButton("Кнопка 1", &qDialog); QPushButton qPushButton2 = QPushButton("Кнопка 2", &qDialog); qHBoxLayout.addWidget(&qPushButton1); qHBoxLayout.addWidget(&qPushButton2); QObject::connect(&qPushButton1, &QPushButton::clicked, [&]() { qPushButton2.setStyleSheet(""); qPushButton1.setStyleSheet("цвет фона: зеленый;"); }); QObject::connect(&qPushButton2, &QPushButton::clicked, [&]() { qPushButton1.setStyleSheet(""); qPushButton2.setStyleSheet("цвет фона: зеленый;"); }); qDialog.exec(); } int main(int argc, char* argv[]) { тест(); } Я пришел к такому выводу, собрав воедино минимальный пример и обратив внимание на окно «Инструменты диагностики». На графиках показано, что память, выделенная моей программой, продолжает увеличиваться каждый раз, когда я нажимаю любую кнопку, и никогда не уменьшается.
Может кто-нибудь объяснить мне, почему это так? Будет ли это проблема Qt или проблема C++? Какой была бы альтернатива этому, если бы не было такого поведения? Моя программа должна работать часами, а может быть, даже днями, когда я ее выпущу, и не могу позволить себе такое поведение.
Я использую Visual Studio 2022, последние версии ISO для C и C++ и Qt. У меня есть файлы заголовков и файлы библиотеки, связанные с моим решением (файлы .lib связаны с решением, а файлы .dll находятся внутри каталога, где находятся исполняемые файлы). ).
Я работаю над своим проектом уже несколько месяцев. Оно стало сложным. Я понял, что у меня есть часть моего проекта, которая постоянно выделяет память в оперативной памяти каждый раз, когда ее вызывают. Несмотря на сложность, я отследил проблему, связанную с настройкой таблицы стилей объектов QPushButton, например: qPushButton.setStylesheet("background-color: green;") .
Вот мой минимальный пример:
#include #include #include #include #include void test(int argc, char* argv[]) { // Инициализируем Qt QApplication::setStyle(QStyleFactory::create("Fusion")); QApplication qApplication = QApplication(argc, argv); QDialog qDialog = QDialog(nullptr); QHBoxLayout qHBoxLayout = QHBoxLayout(&qDialog); qDialog.setLayout(&qHBoxLayout); QPushButton qPushButton1 = QPushButton("Кнопка 1", &qDialog); QPushButton qPushButton2 = QPushButton("Кнопка 2", &qDialog); qHBoxLayout.addWidget(&qPushButton1); qHBoxLayout.addWidget(&qPushButton2); QObject::connect(&qPushButton1, &QPushButton::clicked, [&]() { qPushButton2.setStyleSheet(""); qPushButton1.setStyleSheet("цвет фона: зеленый;"); }); QObject::connect(&qPushButton2, &QPushButton::clicked, [&]() { qPushButton1.setStyleSheet(""); qPushButton2.setStyleSheet("цвет фона: зеленый;"); }); qDialog.exec(); } int main(int argc, char* argv[]) { тест(); } Я пришел к такому выводу, собрав воедино минимальный пример и обратив внимание на окно «Инструменты диагностики». На графиках показано, что память, выделенная моей программой, продолжает увеличиваться каждый раз, когда я нажимаю любую кнопку, и никогда не уменьшается.
Может кто-нибудь объяснить мне, почему это так? Будет ли это проблема Qt или проблема C++? Какой была бы альтернатива этому, если бы не было такого поведения? Моя программа должна работать часами, а может быть, даже днями, когда я ее выпущу, и не могу позволить себе такое поведение.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение