S
SenoyantШілде 11, 2018, 10:50 Т.Ж.

Необходимо перенести значения из одной таблицы в 1м окне в другую таблицу во 2м окне.


Доброго времени суток.
Появилась необходимость в переносе значения из одной таблицы в 1м окне в другую таблицу во 2м окне. Т.К. я все еще чайник в QT, то нужна помощь. Возможно есть кто знающий как перенести значения с типом string, при этом используя стандартные библиотеки QT. Ниже приведу важные части кода и мои потуги в этом деле.
1Й КЛАСС
#include "opisanie.h"
#include "mainwindow.h"
#include "ui_opisanie.h"
#include "ocenka.h"
#include "QTableWidgetItem"
#include "QMessageBox"
#include "QPushButton"
#include "qmath.h"
#include "center.h"

double dopdl = 0;
extern double dopdl;

Opisanie::Opisanie(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Opisanie)
{
    ui->setupUi(this);
    center = new Center();
    ocenka = new Ocenka();
    ui->combo2->addItem("");
    ui->combo2->addItem("открытая");
    ui->combo2->addItem("закрытая");
    ui->button4->setEnabled(false);
    ui->button5->setEnabled(false);
    ui->button6->setStyleSheet("QPushButton{"
                               "background-color: rgb(150, 255, 150);}");

    connect(ui->button1,SIGNAL(clicked(bool)),SLOT(setRows()));
    connect(ui->button2,SIGNAL(clicked(bool)),SLOT(ustForm()));
    connect(ui->button3,SIGNAL(clicked(bool)),SLOT(dopDlina()));
    connect(ui->button4,SIGNAL(clicked(bool)),SLOT(SKOvyt()));
    connect(ui->button6,SIGNAL(clicked(bool)),ocenka,SLOT(show()));
    connect(ui->button6,SIGNAL(clicked(bool)),this,SLOT(otkrOkna()));
    connect(ui->combo2,SIGNAL(currentTextChanged(QString)),SLOT(predPog()));
    connect(this, SIGNAL(sendText(QString)),ocenka,SLOT(resirvedText(QString)));
    connect(ui->button5,SIGNAL(clicked(bool)), center, SLOT(show()));
    connect(this,SIGNAL(sendText2(QString)),center,SLOT(pereslat(QString)));
    connect(ui->button5,SIGNAL(clicked(bool)),this,SLOT(otkrOkna2()));
    connect(ui->button5,SIGNAL(clicked(bool)),center,SLOT(setRows2()));
    connect(this,SIGNAL(sendTablen(QString)),center,SLOT(setColumn(QString)));
    connect(ui->button5,SIGNAL(clicked(bool)),this,SLOT(otkrOkna3()));
}

Opisanie::~Opisanie()
{
    delete ui;
}

void Opisanie::setRows()
{

    QString strR = ui->line1->text();
    n = strR.toDouble();
    ui->table1->setColumnCount(5);
    ui->table1->setHorizontalHeaderLabels(QStringList() << "Пункты хода" << "Si, м" <<
                                          "α'i, °" << "η'i, м" << "L, м");
    ui->table1->setColumnWidth(0,80);
    ui->table1->setColumnWidth(1,70);
    ui->table1->setColumnWidth(2,70);
    ui->table1->setColumnWidth(3,70);
    ui->table1->setColumnWidth(4,50);
    ui->table1->setRowCount((n*2)-1);
    ui->table1->setSpan(0, 4, (n*2)-1, 4);
}

void Opisanie::ustForm()
{
   int sum = 0;
   int Smax = ui->table1->model()->data(ui->table1->model()->index(1,1)).toInt();
   int Smin = ui->table1->model()->data(ui->table1->model()->index(1,1)).toInt();
   int amax = ui->table1->model()->data(ui->table1->model()->index(1,2)).toInt();
   int amin = ui->table1->model()->data(ui->table1->model()->index(1,2)).toInt();
   int nmin = ui->table1->model()->data(ui->table1->model()->index(0,3)).toInt();
   int nmax = ui->table1->model()->data(ui->table1->model()->index(0,3)).toInt();
   int Li = ui->table1->model()->data(ui->table1->model()->index(0,4)).toInt();
   int kk = ui->table1->model()->rowCount();
   int none = ui->table1->model()->data(ui->table1->model()->index(0,3)).toInt();
   int nposl = ui->table1->model()->data(ui->table1->model()->index(kk-1,3)).toInt();

   for (int i=1; i<=((kk-1)/2); i++)
   {
       sum += ui->table1->model()->data(ui->table1->model()->index((i*2)-1,1)).toInt();
   }
   for (int z=1; z<=((kk-1)/2); z++)
   {
       if (Smax < ui->table1->model()->data(ui->table1->model()->index((z*2)-1,1)).toInt())
       Smax = ui->table1->model()->data(ui->table1->model()->index((z*2)-1,1)).toInt();
   }
   for (int k=1; k<=((kk-1)/2); k++)
   {
       if (Smin > ui->table1->model()->data(ui->table1->model()->index((k*2)-1,1)).toInt())
       Smin = ui->table1->model()->data(ui->table1->model()->index((k*2)-1,1)).toInt();
   }
   for (int f=1; f<=((kk-1)/2); f++)
   {
       if (amax < ui->table1->model()->data(ui->table1->model()->index((f*2)-1,2)).toInt())
       amax = ui->table1->model()->data(ui->table1->model()->index((f*2)-1,2)).toInt();
   }
   for (int l=1; l<=((kk-1)/2); l++)
   {
       if (amin > ui->table1->model()->data(ui->table1->model()->index((l*2)-1,2)).toInt())
       amin = ui->table1->model()->data(ui->table1->model()->index((l*2)-1,2)).toInt();
   }
   for (int x=1; x<((kk+1)/2); x++)
   {
       if (nmin > ui->table1->model()->data(ui->table1->model()->index(x*2,3)).toInt())
       nmin = ui->table1->model()->data(ui->table1->model()->index(x*2,3)).toInt();
   }
   for (int p=1; p<((kk+1)/2); p++)
   {
       if (nmax < ui->table1->model()->data(ui->table1->model()->index(p*2,3)).toInt())
       nmax = ui->table1->model()->data(ui->table1->model()->index(p*2,3)).toInt();
   }
   int srsum = sum/((kk-1)/2);
   int proverka1 = abs(none - nposl);
   QString srsumt = QString::number(srsum);
   QString sumt = QString::number(sum);;
   float sumLi = sum/Li;
   float Li8 = 0.125*Li;
   if ((sum<=dopdl*1000) && Smax<=350 && Smin>=40 && amax<=180 && amin>=0 && nmin>0 && Li>0)
   {
       ui->line2->setText(sumt);
       ui->line3->setText(srsumt);
       if (nmax <= Li8 && amax <= 24 && sumLi <= 1.3)//Критерии вытянутости хода
       {
           ui->line4->setText("Ход вытянутый");
       }
       else
       {
           ui->line4->setText("Ход изогнутый");
       }
   }
   else
   {
       QMessageBox::critical(this, "Ошибка измерений", "Проверьте правильность записи измерений!");
   }
   if (proverka1>25)
   {
       QMessageBox::warning(this, "Ошибка измерений", "Расхождение η'1 и η'i превышает"
                                                      " допустимое значение");
   }
   QString ars = ui->line4->text();
   if (ars == "Ход вытянутый")
   {
       ui->button4->setEnabled(true);
   }
   if (ars != "Ход вытянутый")
   {
       ui->button4->setEnabled(false);
   }
   if (ars == "Ход изогнутый")
   {
       ui->button5->setEnabled(true);
   }
   if (ars != "Ход изогнутый")
   {
       ui->button5->setEnabled(false);
   }

}
void Opisanie::otkrOkna2()
{

    emit sendText2(ui->line1->text());
    //emit sendText(ui->table1->text());

}
void Opisanie::otkrOkna3()
{
    int kk = ui->table1->model()->rowCount();
    for (int p=0; p<((kk+1)/2); p++)
    {
   emit sendTablen (ui->table1->model()->data(ui->table1->model()->index(p*2,0)).toString());
    }
}
2й КЛАСС
#include "center.h"
#include "ui_center.h"
#include "opisanie.h"
#include "ocenka.h"
//#include Opisanie.n;




Center::Center(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Center)

{
    ui->setupUi(this);
  //  ui->setupUi(this);
    //model = new QStandardItemModel(n, 3, this );
    //ui->tableView->setModel(model);
    //connect(this, SIGNAL(accepted()), SLOT(setRows2()));
}

//void opiser(Opisanie Ddd){
 //   Opa = Ddd;
//}

Center::~Center()
{
    delete ui;
}
void Center::pereslat(QString str2)
{
    int n = str2.toInt();
    ui->table2->setRowCount(n);
    /*ui->table2->setColumnCount(3);
    ui->table2->setHorizontalHeaderLabels(QStringList() << "Пункты хода" << "D ц.т. i, м" <<
                                          "D^2 ц.т. i,м^2");
    ui->table2->setColumnWidth(0,80);
    ui->table2->setColumnWidth(1,70);
    ui->table2->setColumnWidth(2,70);*/
}

void Center::setRows2()
{
    //int n = str2.toInt();
    //QString strR = ui->line1->text();
    //n = strR.toDouble();
    ui->table2->setColumnCount(3);
    ui->table2->setHorizontalHeaderLabels(QStringList() << "Пункты хода" << "D ц.т. i, м" <<
                                          "D^2 ц.т. i,м^2");
    ui->table2->setColumnWidth(0,80);
    ui->table2->setColumnWidth(1,70);
    ui->table2->setColumnWidth(2,70);

}
void Center::setColumn(QString strn)
{
int rc = ui->table2->rowCount();
QTableWidgetItem *itemr = new QTableWidgetItem();
itemr->setText(strn);
for( int i=0; i<rc; i++){

ui->table2->setItem(i, 0, itemr);
} 



Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

2
Evgenii Legotckoi
  • Шілде 11, 2018, 1:53 Т.Қ.
  • Жауап шешім ретінде белгіленді.

Добрый день!

У всех моделей данных в Qt есть метод data(), вижу, что вы его уже использовали. Вы можете взять данные из модели, которая находится в требуемой таблицы и через цикл for пройтись по строкам, добавив всю необходимую информацию в QStringList, а потом уже этот QStringList послать через сигнал/слотовое соединение во второе окно. Вы там уже пересылаете одну строку, как я вижу. А так будете пересылать целый комплект строк.


    S
    • Шілде 11, 2018, 3:34 Т.Қ.

    Спасибо за наводку!

      Пікірлер

      Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
      Кіріңіз немесе Тіркеліңіз
      Г

      C++ - Тест 001. Первая программа и типы данных

      • Нәтиже:66ұпай,
      • Бағалау ұпайлары-1
      t

      C++ - Тест 001. Первая программа и типы данных

      • Нәтиже:33ұпай,
      • Бағалау ұпайлары-10
      t

      Qt - Тест 001. Сигналы и слоты

      • Нәтиже:52ұпай,
      • Бағалау ұпайлары-4
      Соңғы пікірлер
      G
      GoattRockҚыр. 3, 2024, 10:50 Т.Ж.
      Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
      d
      dblas5Шілде 5, 2024, 8:02 Т.Ж.
      QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
      k
      kmssrАқп. 8, 2024, 3:43 Т.Қ.
      Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
      АК
      Анатолий КононенкоАқп. 4, 2024, 10:50 Т.Қ.
      Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
      Енді форумда талқылаңыз
      Evgenii Legotckoi
      Evgenii LegotckoiМаусым 24, 2024, 12:11 Т.Қ.
      добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
      F
      FynjyШілде 22, 2024, 1:15 Т.Ж.
      при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
      BlinCT
      BlinCTМаусым 24, 2024, 10 Т.Қ.
      Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
      BlinCT
      BlinCTМамыр 5, 2024, 2:46 Т.Ж.
      Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
      Evgenii Legotckoi
      Evgenii LegotckoiМамыр 2, 2024, 11:07 Т.Ж.
      Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

      Бізді әлеуметтік желілерде бақылаңыз