Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Аларий от Ноябрь 09, 2020, 21:54



Название: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 09, 2020, 21:54
Что-то в конце не так:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QStandardItemModel"
#include "QStandardItem"
#include <QTableWidget>
#include <QMessageBox>
#include<QString>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->tableWidget->setColumnCount(4);
    ui->tableWidget->setRowCount(2);

}

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

void MainWindow::on_pushButton_clicked()
{
    QString array[4][2];
    int a=0;
    for(int i=0; i<2; i++)
        for(int j=0; j<4; j++)
        {
         QTableWidgetItem* item = ui->tableWidget->item(i,j);
         if(ui->tableWidget->item(i,j)==0)
         {
             ui->tableWidget->setItem(i,j, new QTableWidgetItem("The Cell is Empty"));
             a=a+1;
         }
    }

if(a!=0)  QMessageBox::information(this,"New Info","Your table is not full");
else
{
    for(int i=0; i<2; i++)
        for(int j=0; j<4; j++)
        {
            QTableWidgetItem* item = ui->tableWidget->item(i,j);
            array[j]=item(i,j);
        }


}
}


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 09, 2020, 22:14
Последняя строка скорее всего неправльная.


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: kambala от Ноябрь 10, 2020, 11:17
объяви array как [2][4], тогда будет правильно. а еще научись пользоваться тегом code.


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Igors от Ноябрь 10, 2020, 12:26
объяви array как [2][4], тогда будет правильно.
Тогда компиляция пройдет, но правильным/хорошим оно не станет  :)
Да, обучение - двусторонний процесс  :)


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: kambala от Ноябрь 10, 2020, 13:43
объяви array как [2][4], тогда будет правильно.
Тогда компиляция пройдет, но правильным/хорошим оно не станет  :)
Да, обучение - двусторонний процесс  :)
так компиляция и сейчас пройдет, просто будет скорее всего падать в рантайме.
тут явно задача уровня «сдать лабу» :)


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 10, 2020, 17:43
объяви array как [2][4], тогда будет правильно. а еще научись пользоваться тегом code.
Объявление правда пропущено. Но это не поможет.
Напрямую приравнивать как просто в С++ не поможет.
В этом суть моего вопроса. как это равенство корректно записать.


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Авварон от Ноябрь 10, 2020, 18:06
Код:
QString array[2][4]
array[i][j] = item(i, j);


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: kambala от Ноябрь 10, 2020, 18:23
объяви array как [2][4], тогда будет правильно. а еще научись пользоваться тегом code.
Объявление правда пропущено. Но это не поможет.
Напрямую приравнивать как просто в С++ не поможет.
В этом суть моего вопроса. как это равенство корректно записать.
оно не пропущено, а объявлено некорректно (цифры наоборот).

какое «равенство» (вероятно, присвоение)? мы ж не знаем что ты пытаешься засунуть в массив. текст ячейки? так надо наверное посмотреть на методы QTableWidgetItem, чтобы понять как его получить? :)
Код:
array[i][j] = item->text();

2Авварон: если внимательно присмотреться к коду, можно заметить, что индекс i съеден рендером как курсив ;)


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 10, 2020, 18:25
Кажись получилось:
void MainWindow::on_pushButton_clicked()
{
    QString matr[3][2], a; int i,j;
    for (i=0; i<2; i++)
        for(j=0; j<3; j++)
        {
    QTableWidgetItem* item = ui->tableWidget->item(i,j);
    //item->setSelected(true);
    //QTableWidgetItem *itm=ui->tableWidget->currentItem();
   //QMessageBox::information(this,"info",itm->text());
    //a=itm->text();
    matr[j]=item->text();
    QMessageBox::information(this,"info",matr[j]);

        }
}


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 10, 2020, 18:26
 matr[j]=item->text();

моль завелась


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: kambala от Ноябрь 10, 2020, 20:40
а еще научись пользоваться тегом code.
и моли не будет


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 10, 2020, 23:07
И как научиться. Где про это написано ?


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 10, 2020, 23:15
Код:
QString array[2][4]
array[i][j] = item(i, j);
Не работает эта рекомендация, потому что она теоретическая как большинство в интернете, а работает то, чтьо я привел.


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 12, 2020, 17:30
break не срабатывает.


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 12, 2020, 17:31
и goto не помогает


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 12, 2020, 22:18
Они оказались лишними. Без них все прекрасно работает.


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: kambala от Ноябрь 12, 2020, 23:53
- break работает только внутри циклов и switch
- чего ты пытаешься добиться непонятно
- ошибка с объявлением массивов до сих пор присутствует

советую поучить С++ :)


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 13, 2020, 11:05
Все эти goto и брейки оказались излишними. И бех них все прекрасно работает.


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 13, 2020, 11:07
- break работает только внутри циклов и switch
- чего ты пытаешься добиться непонятно
- ошибка с объявлением массивов до сих пор присутствует

советую поучить С++ :)
Это ты мне советуешь ?
У меня проблемы не с С++, а с Qt, поскольку С++ в Visual Studio и в Qt несколько разныею


Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Igors от Ноябрь 13, 2020, 11:41
И как научиться. Где про это написано ?
См иконки в окне ответа ("код" и "цитата" под "Цвет текста")

Это ты мне советуешь ?
У меня проблемы не с С++, а с Qt, поскольку С++ в Visual Studio и в Qt несколько разныею
Таким поведением Вы только провоцируете дальнейшие нравоучения. Лучше подучить плюсы и поднабраться опыта, пока спрашивать здесь рановато.



Название: Re: QtableWidget чтение элементов таблицы в двумерный массив
Отправлено: Аларий от Ноябрь 13, 2020, 21:58
Таким поведением Вы только провоцируете дальнейшие нравоучения. Лучше подучить плюсы и поднабраться опыта, пока спрашивать здесь рановато.
Я почему-то до сих пор считал, что вопросы можно задавать на любом форуме (для этого они существуют), а оказалось - не дорос. Видимо звездная болезнь. Это как из википедии моего научного руководителя крупного специалиста в области электроники удали фармацевт и получил медаль за удаление.
Что-то с интернетом не то.
У меня кстати несколько авторских свидетельств на пакеты программ.
А у Вас сколько ?
Вы себя, видимо, считаете универсальным программистом во всех сферах применения. Это тонкий лед. Очень легко провалиться.
Успехов! Поучайте других. Мне стало здесь совсем неинтересно.