crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> [решено]передача данных между модулями
_Vitaliy_
  опции профиля:
сообщение 9.11.2009, 15:34
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 59
Регистрация: 20.11.2008
Пользователь №: 428

Спасибо сказали: 3 раз(а)




Репутация:   0  


Доброго времени суток уважаемое комьюнити.
вопрос для "продвинутых" просто ламерский :blink: но я пока ломаю об него копья (ибо только учусь)...


Есть модуль (мainwindow.срр), в конструкторе создаю новый виджет-таблица (выделен жирным в коде)


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    createActions();
    createMenus();
    createToolBars();

    loadSettings();

  
        [b]dialog=new QDialog(this);
        table=new QTableWidget(dialog);[/b]
        ...        
}



Создал новый модуль obrabotka (obrabotka.cpp):

obrabotka::obrabotka(QWidget *parent) :
    QDialog(parent),
    m_ui(new Ui::obrabotka)
{
    m_ui->setupUi(this);
    
  
    double X1[50];
    int Size,i;


      for (i=2260; i<2300; i++)
    {
        X1[i] =  ???
    }
...


Т.е. я хочу в этот модуль считать данные из TableWidget(dialog) маин-окна, как это правильно сделать.

Сообщение отредактировал _Vitaliy_ - 14.11.2009, 20:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.11.2009, 16:05
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


непонятна связь между двумя (тремя) классами - MainWindow, obrabotka (QDialog с довеском)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 9.11.2009, 17:15
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 59
Регистрация: 20.11.2008
Пользователь №: 428

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 9.11.2009, 16:05) *
непонятна связь между двумя (тремя) классами - MainWindow, obrabotka (QDialog с довеском)


Согласен, привожу часть проекта, прошу сильно не пинать, только учусь

Раскрывающийся текст
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
...
dialog=new QDialog(this);
table=new QTableWidget(dialog);
QVBoxLayout* layout=new QVBoxLayout();
layout->addWidget(table);
dialog->setLayout(layout);
dialog->resize(700,400);
...

}

MainWindow::~MainWindow()
{
saveSettings();
delete ui;
}


void MainWindow::viewObrabotka()
{
obrabotka *pobrabotka = new obrabotka;
pobrabotka->show();
}
...


и второй файл

Раскрывающийся текст
#include "obrabotka.h"
#include "ui_obrabotka.h"
#include "mainwindow.h"


obrabotka::obrabotka(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::obrabotka)
{
m_ui->setupUi(this);

double X1[50], Y1[50],X2[50], Y2[50];
int Size,i;

Size = 50;


for (i=2260; i<2300; i++)
{
X1[i] = ???
}


}
...


В мэйнвиндов я открываю файл для чтения и записываю его в таблицу: dialog=new QDialog(this); table=new QTableWidget(dialog);
Во второй форме: obrabotka.cpp я хочу использовать данные из таблицы мэйнвиндов (по коду X1[i] = ???)
Если я напорол (а я скорее всего напорол) прошу меня поправить или наставить на путь истинный, скорее всего я что-то делаю через ж...

Сообщение отредактировал _Vitaliy_ - 14.11.2009, 20:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.11.2009, 17:39
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(_Vitaliy_ @ 9.11.2009, 20:15) *
Согласен, привожу часть проекта, прошу сильно не пинать, только учусь
Т.к. ты незнаешь как поступить, то часть твоего проекта пользы не принесёт. Лучше нарисуй картинку желаемого взаимодействия между визуальными компонентами (окнами).

П.С. возможно, что когда ты её нарисуешь, то самому станет понятно, как нужно поступить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 9.11.2009, 19:18
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 59
Регистрация: 20.11.2008
Пользователь №: 428

Спасибо сказали: 3 раз(а)




Репутация:   0  


Задача сводится к следующему.
1. Есть главное окно программы.
2. Открываю для чтения текстовый файл данных.
3. В отдельном окне отображается открытый файл в табличном виде. (Опция просмотра реализуется через меню).
4. Есть отдельная форма обработки, в которой происходит обработка данных, взятых из п.п. 3.

Это пока все.
Задача: научиться использовать (правильно) данные между несколькими формами.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.11.2009, 1:55
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(_Vitaliy_ @ 9.11.2009, 22:18) *
3. В отдельном окне отображается открытый файл в табличном виде. (Опция просмотра реализуется через меню).
4. Есть отдельная форма обработки, в которой происходит обработка данных, взятых из п.п. 3.
не понятно почему в разных местах, будет ли это удобно пользователю?


Цитата(_Vitaliy_ @ 9.11.2009, 22:18) *
Задача: научиться использовать (правильно) данные между несколькими формами.
Тут надо простую вещь уяснить - кто-то будет владельцем данных (будет содержать их и раздавать другим). Все потребители этих данных должны уметь общаться с источником данных. Соответственно источник данных должен открывать фай и сохранять в него, если это необходимо.
Например, так:
* В главном окне создаётся некий объект работы с файлом, он открывает файл и предоставляет сигналы и слоты для доступа к данным.
* Объект-росмотрщик файлов создаётся также в главном окне, главное окно связывает этот объект с объектом-источником_данных (передавая аргументы в конструктор или с помощью сигналов и слотов)
* Объект-редактор файлов создаётся также в главном окне, главное окно связывает этот объект с объектом-источником_данных (передавая аргументы в конструктор или с помощью сигналов и слотов)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
_Vitaliy_
  опции профиля:
сообщение 14.11.2009, 21:06
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 59
Регистрация: 20.11.2008
Пользователь №: 428

Спасибо сказали: 3 раз(а)




Репутация:   0  


Отвечу сам себе <_< , благо есть добрые люди, которые оказали неоценимую помощь, благодаря которой освоил (немного) QStandardItemModel.

Итак:
кусок инициализации в главном окне:
MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
{
        ...
    model = new QStandardItemModel(this);
        ...
}


функция, отвечающая за открытие окна с данными:
void MainWindow::flyFile()
{
    QDialog *dialog = new QDialog(this);
        ...
    QTableView *view = new QTableView(dialog);
    view->setModel(model);
        ...
}


в этой функции создается новое окно для обработки:
void MainWindow::viewObrabotka()
{
    obrabotka *pobrabotka = new obrabotka(this);
    pobrabotka->setModel(model);
        ...    
}


а теперь непосредственно второй модуль, в котором происходит обработка:

void obrabotka::setModel(QStandardItemModel *model)
{
    m_model = model;

        ...  
    for (int i = 0; i < m_model->rowCount(); i++) {
                x1.append(m_model->item(i, 0)->text().toDouble());
                ...                        
    }
   ...
}


и проблема решена...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 11:20