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

时间:2018-06-12 16:12:57

标签: c++ qt qobject qtwidgets

将此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");

创造这么多课程是否值得?对于小型冗余任务?

1 个答案:

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

关于你究竟想要什么的问题并不是很清楚,但是如果它是一个类的私有成员,你似乎很难理解如何改变按钮的属性,上面的例子将帮助你这一点。