QT/C++ – доступ к пользовательскому интерфейсу MainWindow из другого классаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 QT/C++ – доступ к пользовательскому интерфейсу MainWindow из другого класса

Сообщение Anonymous »

Я новичок в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»