Я новичок в C++ и Qt, так что, возможно, это тривиально. Конечно, кажется, что это должно быть просто, но я ищу ответ уже несколько часов и не могу найти решение. Я делаю простую настольную игру, в которой пользовательский интерфейс MainWindow (созданный в QtDesigner) содержит холст для игрового поля (QGraphicsView). Теперь файл main.cpp настолько прост, насколько это возможно:
Код: Выделить всё
MainWindow Game;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Game.show();
return a.exec();
}
Поскольку мне нужно получить доступ и редактировать виджеты MainWindow из другого совершенно несвязанного класса, я подумал, что проще всего было бы просто сделать MainWindow глобальной переменной. Однако, похоже, такой подход был очень неправильным. При попытке запустить проект в QtDesigner я получаю ошибку библиотеки времени выполнения Microsoft Visual C++: приложение необычным образом запросило среду выполнения для его завершения.
Итак, как правильно сделать то, что мне нужно?
Помимо MainWindow у меня есть диалоговое окно для новой игры (
, созданный из QtDesigner), который отображается после щелчка по пункту меню в MainWindow. Когда пользователь вводит все параметры игры и нажимает «ОК» в диалоговом окне, я создаю экземпляр специального не Qt-класса под названием GameState. Этот класс предназначен для управления самой игрой, рисования доски, подсказок пользователю и т. д. Однако, поскольку этот класс создается в QDialog, он не знает о существовании MainWindow, и поэтому я не могу ничего сделать с MainWindow из этого класса. Как тогда я могу изменить MainWindow из несвязанного класса?
Кроме того, как работает функция setEnabled()? Кажется, он никогда ничего не делает. Любой виджет, который я установил как отключенный в QtDesigner, а затем попытался включить с помощью этой функции, все равно остается отключенным в графическом интерфейсе...
Подробнее здесь:
https://stackoverflow.com/questions/592 ... rent-class