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

Access QT Widget child members from QT Widget Object Instance

本文关键字:QT Widget 成员 访问 对象 实例      更新时间:2023-10-16

考虑将此QWidget初始化为:

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

它显示带有文本按钮按钮的记录器。
现在,如果我想访问 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成为类成员的一部分。

这种东西:

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

这个问题并不是很清楚你到底想要什么,但似乎你正在努力理解如何改变按钮的属性,如果它是一个类的私有成员,上面的例子将帮助你。