Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 24
1

QTableWidgetItem не добавляется в целевую ячейку таблицы QTableWidget

20.03.2017, 23:34. Показов 2020. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дело тут в чем, необходимо что бы строки добавлялись сами и заполнялись числами, по увеличению счетчика колонок cc, в колонку которую насчитал счетчик, после того как фиксируется превышение колонок в строке, создается новая, счетчик обнуляется, на вход поступает число которое необходимо добавить. Для точности установлен LCDNumber, который фиксирует то что добавляется, фиксирует то что нужно. В целях необходимости сразу добавить строку, как только вызывается функция объявляется счетчик так что бы сработало условие т.е. cc= size+1 объявление происходит в диалоговом окне, которое завершаю работу в начале функционирования таблицы и не вызывается после до закрытия программы.
Работа функции сводится к тому что при первом вызове добавляется строка, элемент в первую ячейку, после чего новые элементы добавляются только в эту же ячейку (r,c/1,0), но строки добавляются, хоть и пустые.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void MainWindow::nttbl(int q)
{
    QTableWidgetItem *p = new QTableWidgetItem;
    p->setText(tr("%1").arg(q));
    int r = ui->tableWidget->rowCount();
    if(cc>c)// "c" объявлена в том же диалоге что и "cc" c=ui->tableWidget->columnCount();
    {
        ui->tableWidget->insertRow(r);
        ui->tableWidget->setItem(r, cc, p);
        cc=0;
    }
    else
    {
        ui->tableWidget->setItem(r, cc, p);
    }
    ui->lcdNumber->display(q);
    ++cc;
    p->~QTableWidgetItem();
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2017, 23:34
Ответы с готовыми решениями:

QTableWidget кнопка и текст в 1 ячейке используя QTableWidgetItem
Собственно необходимо запихнуть кнопку для удаления в ячейку с текстом(текст и кнопка должны быть...

QTableWidgetItem - как отследить мгновенное изменение текста, а не после перехода на другую ячейку?
QTableWidgetItem собственно :D В таблице есть всякие сигналы, типа cellChanget и т.д. , но они все...

QTableWidget сделать недоступной ячейку
Добрый день! каким образом можно сделать неактивной(недоступной) ячейку в QTableWidget, что-то...

QTableWidget: тултип при наведении курсора мыши на ячейку
Добрый вечер. Подскажите, пожалуйста, как сделать так, чтобы при наведении курсора мыши на ячейку...

12
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.03.2017, 07:16 2
Цитата Сообщение от FOOL_01 Посмотреть сообщение
p->~QTableWidgetItem();
Вначале вы элемент добавляете, но в конце удаляете. А после - жалуетесь, что его нет. Где логика?
При этом удаление идёт через заднее место: всё равно место в куче, выделенное через new, таким образом не освобождается.
0
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 24
21.03.2017, 08:10  [ТС] 3
Не вероятно, но факт, без этой строчки все работает точно так же как и описано.
Попробовал переписать через delete, но изменений не произошло. Думал что может быть данные в таблице все равно будут сохраняться, было через чур интересно освободить выделенное.
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.03.2017, 09:24 4
FOOL_01, возможно ошибка у вас не только в этом месте, но и в куче других.
C++ (Qt)
1
2
3
4
5
6
    if(cc>c)// "c" объявлена в том же диалоге что и "cc" c=ui->tableWidget->columnCount();
    {
        ui->tableWidget->insertRow(r);
        ui->tableWidget->setItem(r, cc, p);
        cc=0;
    }
То есть, если колонка, в которую надо вставить элемент, больше, чем число колонок в таблице, то вы создаёте новую строку и пытаетесь запихнуть элемент по адресу несуществующей колонки?
P.S. Более внятно напишите, что вы хотите сделать.
1
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 24
21.03.2017, 10:00  [ТС] 5
Благодарю, за внимательность, что-то совсем уже не замечаю пустяковые ошибки.
Необходимо наладить автозаполнение таблицы по вызову функции, так что бы одну ячейку за вызов, следующую за другой вызов, если колонок не хватает, то дописать строку и в нее вписать число.
Подредактировал, поменял условие, строка добавлялась поздно, сейчас так, как того требует задача. В данной редакции получается что строка добавляется, первый элемент добавляется на свое место, второй тоже, но при добавлении первый становится как второй, если столбца три, то при добавлении третьего элемента, первый становится равен второму, при двух столбцах элементы остаются одинаковыми.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void MainWindow::poppednumers(int q)
{
    QTableWidgetItem *p = new QTableWidgetItem;
    p->setText(tr("%1").arg(q));
 
    if(cc>=c)
    {
        cc=0;
        ui->tableWidget->insertRow(r);
        ui->tableWidget->setItem(r, cc, p);
    }
    else
    {
        QTableWidgetItem *t = new QTableWidgetItem;
        t->setText(tr("%1").arg(q));
        ui->tableWidget->setItem(r, cc, t);
    }
    ui->lcdNumber->display(q);
    cc++;
}
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.03.2017, 11:12 6
Лучший ответ Сообщение было отмечено FOOL_01 как решение

Решение

FOOL_01, То есть автозаполнять таблицу по принципу GridLayout?
Исправил ваш код:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void MainWindow::poppednumers(int q)
{
    Q_ASSERT(ui->tableWidget->columnCount());
    QTableWidgetItem *p = new QTableWidgetItem;
    p->setText(tr("%1").arg(q));
 
    if (!ui->tableWidget->rowCount())
        ui->tableWidget->insertRow(0);
 
    if(cc >= ui->tableWidget->columnCount()) {
        cc=0;
        ui->tableWidget->insertRow(ui->tableWidget->rowCount());
    }    
    ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, cc, p);
    cc++;
    ui->lcdNumber->display(q);
}
1
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 24
21.03.2017, 11:41  [ТС] 7
Работает отлично, только как переписать, что бы на месте черного кружочка было число которое туда определилось с самого начала добавления чисел в новые строки, то есть самое первое, у меня была единица. Красным выделил правильно добавленное.
Миниатюры
QTableWidgetItem не добавляется в целевую ячейку таблицы QTableWidget  
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.03.2017, 12:02 8
FOOL_01, скорее всего ошибка у вас где-то в другом месте.

Или вы хотите перезаписать 9ку? То есть изменить значение уже существующего элемента?
0
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 24
21.03.2017, 12:50  [ТС] 9
Та что в черном кружечке не должна меняться, с единицы на другие числа, в красном все нормально. Просмотрел остальной код, там вообще нету взаимодействия с этими строками и не ссылается на эту ячейку ни чего.
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.03.2017, 13:01 10
FOOL_01, если у вас там "начало добавления в новые строки", то откуда на первой строке числа 10, 7 и 6?
0
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 24
21.03.2017, 13:08  [ТС] 11
С той строкой манипуляции производятся отдельно от всех остальных. В первой строке числа получаются при вводе их в программу. Сначала организован ввод в первую строку, потом вызов функции, о которой идет речь, с передачей ей последнего числа , если поступают новые числа.
0
1070 / 652 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.03.2017, 13:24 12
Цитата Сообщение от FOOL_01 Посмотреть сообщение
С той строкой манипуляции производятся отдельно от всех остальных. В первой строке числа получаются при вводе их в программу. Сначала организован ввод в первую строку, потом вызов функции, о которой идет речь, с передачей ей последнего числа , если поступают новые числа.
О том и речь. Вы используете разные методы ввода в таблицу в нескольких местах и где-то неучли их пересечение. Иначе откуда вылезла 9ка во второй строке?
1
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 24
21.03.2017, 16:27  [ТС] 13
Проблему разрешил. ВСЕ ТАК И БЫЛО! Ошибка была в самом простом, начинал оперировать колонками с их колличества, забыв что нумерация с 0
0
21.03.2017, 16:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2017, 16:27
Помогаю со студенческими работами здесь

Убрать стандартное выделение при нажатии на ячейку QTableWidget
Добрый день. Как убрать вот эту подсветку, и вместо неё по нажатию на ячейку загрузить другую...

С помощью setItem в ячейку QTableWidget вывести многострочный текст
Есть таблица - table. Хочу с помощью setItem в ячейку вывести многострочный текст. Код:...

При копировании ячеек из таблицы Word в Excel, программно, в каждую ячейку добавляется пара символов-прямоугольничков.
При копировании ячеек из таблицы Word в Excel, программно, в каждую ячейку добавляется пара...

Как при наведении на ячейку QTableWidget вывести подсказку с содержимым ячейки?
подскажите как при наведении на ячейку QTableWidget вывести подсказку с содержимым ячейки?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru