#c #qt #inheritance #qpushbutton
#c #qt #наследование #qpushbutton
Вопрос:
Я работаю над проектом с Qt и C . Теперь мой вопрос:
Возможно ли наследование в классах пользовательского интерфейса?
Например: это виджет, который я хочу унаследовать от
//windowA.h
namespace Ui {
class WindowA;
}
class WindowA : public QWidget
{
Q_OBJECT
public:
explicit WindowA(QWidget *parent = nullptr);
~AddWindow();
QPushButton *button;
};
//windowA.cpp
WindowA::WindowA(QWidget *parent) :
QWidget(parent)
{
button = new QPushButton();
button->setText("Save");
connect(button, SIGNAL (clicked()), this, SLOT (//slot));
QGridLayout *layout = new QGridLayout();
layout->addWidget(button, 0, 0);
this->setLayout(layout);
}
Это виджет, который наследуется от WindowA
//windowB.h
namespace Ui {
class WindowB;
}
class WindowB : public WindowA
{
Q_OBJECT
public:
explicit WindowB(QWidget *parent = nullptr);
~WindowB();
};
Как бы я реализовал QPushButton, чтобы можно было задавать разный текст в обоих классах?
Я могу добавить QPushButton, но текст, установленный в WindowA
, также будет установлен в WindowB
. Проблема заключается в том, чтобы задать другой текст для кнопки в WindowB
, чем он установлен для кнопки в WindowA
Комментарии:
1. «Я могу добавить QPushButton, но текст, установленный в
WindowA
, также будет установлен вWindowB
«. — Да, это то, что означает наследование. windowB — ЭТО Windowowa. Я не совсем понимаю, о чем вы спрашиваете.2. @JarMan но как я могу изменить текст кнопки в
WindowB
так, чтобы он отличался от вWindowA
?3. Где задается ваш текст?
4. @JarMan Я обновил приведенный выше пример кода, извините.
Ответ №1:
Если я правильно понимаю ваш вопрос, все, что вам нужно сделать, это изменить текст, который вы задаете на кнопке в своем конструкторе:
WindowB::WindowB(QWidget *parent) :
WindowA(parent)
{
button->setText("Something else!");
}
Комментарии:
1. Нет повторного объявления
button
вWindowB
? Нетbutton = new QPushButton
?2. Вы, должно быть, новичок в C . windowB уже объявлен
button
, потому что это Windowowa. (Посмотрите, как он вызывает конструктор WindowA?) Если вы добавитеbutton = new QPushButton
снова, вы перезапишете существующую кнопку и потеряете память.3. Ну, я протестировал это, и это сработало. Большое вам спасибо!
4. И да, я довольно новичок в C , но я продолжаю учиться.