Доступ к дочерним элементам виджета QT из экземпляра объекта виджета QT - PullRequest
0 голосов
/ 12 июня 2018

Рассмотрим это QWidget, инициализированный как:

QWidget *Logger;
Logger = new QWidget();

QPushButton *btn;
btn= new QPushButton(Logger);
btn->setObjectName(QStringLiteral("pushButton"));

Logger->show();

Он отображает регистратор с кнопкой с текстом pushButton.
Теперь позже, если я хочу получить доступ к кнопке pushButton, я делаю это следующим образомэто:

QPushButton *pushButton = Logger->findChild<QPushButton *>("pushButton");
pushButton->setText("NEW BUTTON");

Я хочу знать, есть ли возможность прямого доступа к этой кнопке с Logger ??
Что-то вроде:

Logger->btn ... 

Я пытался, но это не такне работа.У меня есть виджеты, определенные так со многими дочерними объектами, и мне интересно, это единственный способ получить к ним доступ во время выполнения ??

РЕДАКТИРОВАТЬ: @drescherjm, Итак, что-то вроде этих строк вы имеете в виду:

class MyWidget : QWidget
{

public:
    QPushButton *pushButton;
    MyWidget(){
        pushButton = new QPushButton(this);
    }
};


MyWidget *w = new MyWidget();
w->pushButton->setText("XYZ");

И стоит ли создавать столько классов ??для небольших избыточных задач?

1 Ответ

0 голосов
/ 12 июня 2018

Это не сработает так, как вы ожидаете.Используйте btn, пока оно находится в области видимости.

Если вы создаете btn где-то локально, но ваш сценарий использования требует, чтобы вы использовали его в разных местах кода, тогда вам нужно пересмотреть свой дизайн и сделать QPushButton частью классаmember.

Что-то в этом роде:

#include <QPushButton>

class SampleWidget : public QWidget
{
   public :
     SampleWidget( QWidget * inParent );
     // public methods to change the properties of the QPushButton go here.
     void SetButtonText( QString const & inString );
     bool IsButtonChecked();

   private :
     QPushButton *mSampleButton;
};

И в реализации:

SampleWidget::SampleWidget(QWidget *parent)
  :
   mSampleButton( new QPushButton( parent ) )
{
   // connect( mSampleButton,......... ); Connection to slot
}

void SampleWidget::SetButtonText( QString const & inString )
{
   mSampleButton->setText( inString );
}

bool
SampleWidget::IsButtonChecked()
{
   return mSampleButton->isChecked();
}

Вопрос был не очень ясен о том, что именно вы хотите, но этоПохоже, вы пытаетесь понять, как изменить атрибуты кнопки, если она является закрытым членом класса, и приведенный выше пример поможет вам в этом.

...