Russian Qt Forum
Ноябрь 25, 2024, 15:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача данных из одного объекта в другой.  (Прочитано 4868 раз)
Widget
Гость
« : Март 07, 2009, 00:21 »

Всем привет!

Есть два класса "A" и "B".
На базе этих классов создаются два объекта "a" и "b".
Объект "а" создается в объекте "b".

Проблема.
1. Как передать данные из объекта "a" m_StringList_A (класс A) в объект "b" m_StringList_B (класс B)
по сигналу нажатия кнопки Button (класс A) слот void A::setStringList() ?

2. Затем вызвать функцию void B::setComboBox() ?

______________________________________________
Заранее благодарю, за конструктивные ответы.

Код:
// main.cpp
#include <QtGui>
#include "m.h"

//--------------------------------------------------------
int main(int argc, char** argv)
{
      QApplication app(argc, argv);

      B b;
      b.show();

      return app.exec();
}

Код:
// m.h
#ifndef M_H
#define M_H

#include <QtGui>

//------------------------------------------------------------------------
class A : public QWidget
{
    Q_OBJECT
public:
    A(QWidget* parent = 0);
~A(){};

public slots:
      void setStringList();
 
private:
QStringList m_StringList_A;
QPushButton* m_pPushButton;
};


//------------------------------------------------------------------------
class B : public QWidget
{
    Q_OBJECT
public:
    B(QWidget* parent = 0);
~B(){};
     
private:
QStringList m_StringList_B;
QComboBox* m_pComboBox;
void setComboBox();
A a;
};

#endif

Код:
// m.cpp
#include <QtGui>
#include "m.h"

//--------------------------------------------------------
A::A(QWidget* parent): QWidget(parent)
{

m_StringList_A << "New1" << "New2";
 
m_pPushButton = new QPushButton ("Button");
connect(m_pPushButton, SIGNAL(clicked()), this, SLOT(setStringList()));

QPushButton* pPushButton_Quit = new QPushButton("&Quit");
connect(pPushButton_Quit, SIGNAL(clicked()), qApp, SLOT(quit()));

QGridLayout* g = new QGridLayout;
g->addWidget(m_pPushButton, 0, 0);
g->addWidget(pPushButton_Quit, 1, 0);
setLayout(g);

setWindowTitle("A");
move(x() + 0, y() + 0);
resize(200, 120);

}

void A::setStringList()
{
// ??????????
}


//--------------------------------------------------------
B::B(QWidget* parent): QWidget(parent)
{
a.show();

m_StringList_B << "Text1" << "Text2";
m_pComboBox = new QComboBox;
setComboBox();

QGridLayout* g = new QGridLayout;
g->addWidget(m_pComboBox, 0, 0);
setLayout(g);

setWindowTitle("B");
move(x() + 300, y() + 0);
resize(200, 120);

}

void B::setComboBox()
{
m_pComboBox->addItems(m_StringList_B);
m_pComboBox->setEditable(true);
}
Записан
igor_bogomolov
Гость
« Ответ #1 : Март 07, 2009, 01:45 »

Например можно так:
В класс А добавляем сигнал
Код
C++ (Qt)
signals:
    void setList(const QStringList &);
 

В класс В слот
Код
C++ (Qt)
private slots:
   void setList(const QStringList &strList);
 

В классе А
Код
C++ (Qt)
void A::setStringList()
{
   emit setList(m_StringList_A);
}
 

В конструкторе класса В
Код
C++ (Qt)
connect(&a, SIGNAL(setList(const QStringList &)), SLOT(setList(const QStringList &)));
 
и
Код
C++ (Qt)
void B::setList(const QStringList &strList) {
   m_StringList_B = strList;
   setComboBox();
}
 
Теперь по каждому нажатию QPushButton в QComboBox будут добавляться новые item-ы
Записан
Widget
Гость
« Ответ #2 : Март 07, 2009, 20:31 »

igor_bogomolov
Спасибо, работает Веселый!
Жаль, что на форуме кармы нет  Злой, добавил бы +1.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.122 секунд. Запросов: 21.