2013-08-17 3 views
0

Как получить значение объекта в другом классе? Такие, как у меня есть 2 классов (класс WidgetA и класс WidgetB) и те классы, созданные класса Widget, как это:получить значение объекта в другом классе

//widget.h 

#include <QWidget> 
#include <QtGui> 

class widgetA; 
class widgetB; 

class Widget : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit Widget(QWidget *parent = 0); 
private: 
    QComboBox* comboBox; 
    QStackedWidget* stackWidget; 
    widgetA *wa; 
    widgetB *wb; 
}; 

class widgetA : public QWidget 
{ 
    Q_OBJECT 
public: 
    widgetA(QWidget *parent = 0); 
private: 
    QString mystr; 
    QLineEdit* lineEdit; 
}; 

class widgetB : public QWidget 
{ 
    Q_OBJECT 

public: 
    widgetB(QWidget *parent = 0); 
    QLabel* label; 
}; 

И это файл widget.cpp:

#include "widget.h" 

Widget::Widget(QWidget *parent) : 
    QWidget(parent) 
{ 
    comboBox = new QComboBox(this); 
    comboBox->addItem(tr("Widget A")); 
    comboBox->addItem(tr("Widget B")); 

    wa = new widgetA(this); 
    wb = new widgetB(this); 

    stackWidget = new QStackedWidget(this); 
    stackWidget->addWidget(wa); 
    stackWidget->addWidget(wb); 
    stackWidget->setCurrentIndex(0); 

    connect(comboBox, SIGNAL(currentIndexChanged(int)), stackWidget, SLOT(setCurrentIndex(int))); 

    QVBoxLayout* layout = new QVBoxLayout; 
    layout->addWidget(comboBox); 
    layout->addWidget(stackWidget); 

    setLayout(layout); 
} 

widgetA::widgetA(QWidget *parent): 
    QWidget(parent) 
{ 
    lineEdit = new QLineEdit; 
    QHBoxLayout *lay = new QHBoxLayout; 
    lay->addWidget(lineEdit); 
    lineEdit->setReadOnly(true); 

    setLayout(lay); 
} 


widgetB::widgetB(QWidget *parent): 
    QWidget(parent) 
{ 
    label = new QLabel("Hello QT"); 
    QHBoxLayout* lay = new QHBoxLayout; 
    lay->addWidget(label); 
    setLayout(lay); 
} 

Как я получить текст QLabel label в классе WidgetB в QString mystr в классе WidgetA?

+0

вы хотите получить его на конкретном мероприятии? – Kunal

+0

@Kunal: Я хочу, чтобы это ушло, мое приложение запущено –

ответ

2

Чистейший путь с точкой зрения надлежащей развязки и разделения проблем является добавление переадресации геттера label-> текст():

QString widgetB::text() const //or more specific name depending on the context 
{ 
    return label->text(); 
} 

Если вам необходимо уведомление при изменении значения, добавьте сигнал:

class widgetB : public QWidget { 
... 
Q_SIGNALS: 
    void textChanged(const QString& text); 
... 
}; 

и испускать его, когда вы обновляете этикетку.

+0

Спасибо за ваш ответ, я хочу получить значение QLabel, когда мое приложение запустилось. Могу ли я установить соединение в событие загрузки, запущен ли приложение? и какое событие может это сделать? –

+0

вы можете сделать это в конструкторе класса Widget, используя вышеупомянутый API – Kunal

Смежные вопросы