从 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 的私有成员和上面的例子会帮助你。
将此 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 的私有成员和上面的例子会帮助你。