crossplatform.ru

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


  Ответ в [решено]передача данных между модулями
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
_Vitaliy_ Дата 14.11.2009, 21:06
  Отвечу сам себе <_< , благо есть добрые люди, которые оказали неоценимую помощь, благодаря которой освоил (немного) 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());
                ...                        
    }
   ...
}


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


Цитата(_Vitaliy_ @ 9.11.2009, 22:18) *
Задача: научиться использовать (правильно) данные между несколькими формами.
Тут надо простую вещь уяснить - кто-то будет владельцем данных (будет содержать их и раздавать другим). Все потребители этих данных должны уметь общаться с источником данных. Соответственно источник данных должен открывать фай и сохранять в него, если это необходимо.
Например, так:
* В главном окне создаётся некий объект работы с файлом, он открывает файл и предоставляет сигналы и слоты для доступа к данным.
* Объект-росмотрщик файлов создаётся также в главном окне, главное окно связывает этот объект с объектом-источником_данных (передавая аргументы в конструктор или с помощью сигналов и слотов)
* Объект-редактор файлов создаётся также в главном окне, главное окно связывает этот объект с объектом-источником_данных (передавая аргументы в конструктор или с помощью сигналов и слотов)
_Vitaliy_ Дата 9.11.2009, 19:18
  Задача сводится к следующему.
1. Есть главное окно программы.
2. Открываю для чтения текстовый файл данных.
3. В отдельном окне отображается открытый файл в табличном виде. (Опция просмотра реализуется через меню).
4. Есть отдельная форма обработки, в которой происходит обработка данных, взятых из п.п. 3.

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

П.С. возможно, что когда ты её нарисуешь, то самому станет понятно, как нужно поступить.
_Vitaliy_ Дата 9.11.2009, 17:15
 
Цитата(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] = ???)
Если я напорол (а я скорее всего напорол) прошу меня поправить или наставить на путь истинный, скорее всего я что-то делаю через ж...
Litkevich Yuriy Дата 9.11.2009, 16:05
  непонятна связь между двумя (тремя) классами - MainWindow, obrabotka (QDialog с довеском)
_Vitaliy_ Дата 9.11.2009, 15:34
  Доброго времени суток уважаемое комьюнити.
вопрос для "продвинутых" просто ламерский :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) маин-окна, как это правильно сделать.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 18.5.2024, 21:09