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