将此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
直接访问此pushButton?如下所示:
Logger->btn ...
我试过但它不起作用。我有像这样定义的Widgets有很多子对象,我想知道这是在运行时访问它们的唯一方法吗?
编辑:@drescherjm,你的意思是:
class MyWidget : QWidget
{
public:
QPushButton *pushButton;
MyWidget(){
pushButton = new QPushButton(this);
}
};
MyWidget *w = new MyWidget();
w->pushButton->setText("XYZ");
创造这么多课程是否值得?对于小型冗余任务?
答案 0 :(得分:0)
它不会像你期望的那样工作。只要它在范围内,请使用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();
}
关于你究竟想要什么的问题并不是很清楚,但是如果它是一个类的私有成员,你似乎很难理解如何改变按钮的属性,上面的例子将帮助你这一点。