Ссылка на QWidget из другого класса - PullRequest
0 голосов
/ 16 января 2019

Извините, если этот вопрос повторяется, но я действительно изо всех сил пытаюсь найти какой-либо ответ.

Пожалуйста, имейте ввиду, что я новичок в программировании на С ++.

Моя проблема в этом. У меня есть графический интерфейс в QtCreator . Есть два слушателей привязка keyReleaseEvent, один на основном классе (SuperFalcon), один на QTextEdit (который является отдельным и измененным классом). У меня есть QFrame , который я хотел бы переключить скрыть / показать на "Ctrl + f" событие ключа. Так как этот QFrame (имя объекта findWidget) принадлежит SuperFalcon-> ui , проблем нет, все работает нормально, проблема начинается, когда я пытаюсь сделать " Ctrl + f " in QTextEdit , потому что это отдельный прослушиватель событий. В основном я попробовал это.

имя основного класса "SuperFalcon", поэтому:

в superfalcon.h я сделал публичный статический указатель следующим образом:

public:

    static QFrame *fWidget;

затем superfalcon.cpp, сначала я выполняю

ui->findWidget->hide();, а затем

fWidget = ui->findWidget; в надежде получить указатель на виджет.

Далее в моем классе QTextEdit в функции keyReleaseEvent я пытался получить этот указатель, как SuperFalcon::fWidget->show(), но я получил неопределенную ссылку на него.

Итак, чтобы упростить ситуацию, я не знаю, как, по возможности, получить ссылку на виджет QFrame, который является частью одного класса (SuperFalcon), из другого класса (класс QTextEdit) для выполнения некоторых команд на QFrame.

Если это не совсем понятно, я могу предоставить код.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

У вас должно быть определение любой статической переменной-члена. Это определение должно быть в исходном файле из-за одного правила определения.

Просто добавьте строку:

QFrame* SuperFalcon::fWidget;

в "superfalcon.cpp".

0 голосов
/ 16 января 2019

Вы должны инициализировать вашу статическую переменную в superfalcon.cpp:

QFrame* SuperFalcon::fWigdet = nullptr;
...