Я новичок в 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, у меня есть диалог для новой игры (QDialog, сгенерированный из QtDesigner), который отображается после щелчка по пункту меню в MainWindow. Когда пользователь вводит все параметры для игры и нажимает кнопку ОК в диалоговом окне, я создаю экземпляр пользовательского класса, не являющегося Qt, с именем GameState. Этот класс предназначен для управления самой игрой, рисования доски, приглашения пользователя и т. Д. Однако, поскольку этот класс создан в QDialog, он не знает о существовании MainWindow, и поэтому я ничего не могу сделать с MainWindow. из этого класса. Как я могу изменить MainWindow из несвязанного класса, тогда?
Кроме того, jsut, как работает функция setEnabled ()? Кажется, он никогда ничего не делает. Любой виджет, который я установил как отключенный в QtDesigner и затем пытающийся включить его с помощью этой функции, все еще остается отключенным в графическом интерфейсе ...