Проблема с СЛОТОМ / C

#c #qt #slot

Вопрос:

Я пытаюсь разобраться в этой ошибке. У меня есть простое приложение, созданное с помощью Qt Creator.

У меня есть три кнопки, и 2 из них не включены. Затем, когда я нажимаю первую кнопку, я хочу сделать их видимыми, но когда я нажимаю кнопку, возникает ошибка Windows : «программа перестала работать». программа компилирует и делает все остальное.

 QPushButton *dealButton = new QPushButton(tr("Deal cards"));
dealButton->show();

QPushButton *hitButton = new QPushButton(tr("HIT"));
hitButton->show();
hitButton->setEnabled(false);

QPushButton *standButton = new QPushButton(tr("STAND"));
standButton->show();
standButton->setEnabled(false);

...
connect(dealButton, SIGNAL(clicked()), this, SLOT(dealCards()));

...
void MainWindow::dealCards()
{
hitButton->setEnabled(true);
standButton->setEnabled(true);
}
 

таков код.

Ответ №1:

Проблема заключается в том, что вы повторно объявляете dealButton и другие в вашем конструкторе (или в любой другой функции, у которой есть new вызовы, которые вы показываете).

Вы должны иметь в своем определении класса:

 private: // probably
  QPushButton *dealButton;
 

И в вашем коде инициализации конструктора или графического интерфейса:

 dealButton = new QPushButton(...); // note: not QPushButton *dealButton = ...
 

Теперь у вас есть возможность создать новую переменную с именем dealButton , локальную для этой области (функции). Эта переменная скрывает (маскирует) члена класса.