C Qt наследуется от пользовательского виджета

#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 , но я продолжаю учиться.