从 QT Widget 对象实例访问 QT Widget 子成员

Access QT Widget child members from QT Widget Object Instance

将此 QWidget 初始化为:

QWidget *Logger;
Logger = new QWidget();

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

Logger->show();

它用带有文本 pushButton 的按钮显示 Logger。
现在稍后如果我想访问 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");

创造这么多 类 值得吗??对于小的冗余任务?

它不会像您期望的那样工作。只要在范围内,就使用 btn

如果您在本地某处创建 btn,但您的用例要求您在代码中的不同位置使用它,那么您需要重新考虑您的设计并制作 QPushButton 部分class 成员。

类似的东西:

#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();
}

问题不是很清楚你到底想要什么,但你似乎很难理解如何改变按钮的属性,如果它是 class 的私有成员和上面的例子会帮助你。