Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2012, 18:49   #1
Renok
Пользователь
 
Регистрация: 27.05.2011
Сообщений: 36
По умолчанию Qt Creator работа с QTableWidget

Проблема: изначально не известно, сколько строк будет в таблице, поэтому их нужно создавать динамически.
Нашел вот такой метод создания ячейки:
Код:
QTableWidgetItem *newItem = new QTableWidgetItem;
newItem->setText(m_Work[i]->name);
ui->TW_Work->setItem(0, 0, newItem );
Но таким способом создается только одна ячейка, а ячеек в строке 6 штук. Плюс, как написано выше, строк может быть большое количество.
Динамически создавать таким способом ячейки не могу, так как каждой из них нужно задавать уникальное имя, а делать для них массив считаю накладным. Наверняка должен быть способ автоматического создания любого количества ячеек.
Вот мне и нужен такой метод.
Renok вне форума Ответить с цитированием
Старый 26.12.2012, 11:36   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Привет, Renok!

В документации на QTableWidget написано, что ячейки (QTableWidgetItem) создаются отдельно от таблицы. И как я понимаю, другого способа нет.

А что если менять размер таблицы в момент загрузки данных с помощью методов: setRowCount() и setColumnCount(). И перезагружать таблицу.

Сделал примерчик, в котором изменяется (на случайное число) размер таблицы и загружаются случайные данные, при нажатии на кнопку.




main.cpp
Код:
#include <QApplication>

#include "tabledialog.h"

int main(int argc, char **argv)
{
  QApplication app( argc, argv );

  TableDialog dlg;
  dlg.show();

  return app.exec();
}

tabledialog.h
Код:
#ifndef TABLEDIALOG_H
#define TABLEDIALOG_H

#include <QDialog>

class QPushButton;
class QTableWidget;

class TableDialog : public QDialog
{
    Q_OBJECT
public:
    explicit TableDialog(QWidget *parent = 0);
    
signals:
    
private slots:
    void makeTable();
    
private:
    QPushButton *clickButton;
    QTableWidget *table;
    int ncol;
    int nrow;
    void loadData();
};

#endif // TABLEDIALOG_H

tabledialog.cpp
Код:
#include "tabledialog.h"
#include <QPushButton>
#include <QHBoxLayout>
#include <QTableWidget>
#include <QHeaderView>
#include <stdlib.h>

TableDialog::TableDialog(QWidget *parent) :
    QDialog(parent)
{
    QHBoxLayout *layout = new QHBoxLayout(this);

    table = new QTableWidget(0, 2);
    layout->addWidget(table);

    makeTable();

    clickButton = new QPushButton("Make table", this);
    layout->addWidget(clickButton);

    connect( clickButton, SIGNAL(clicked()), this, SLOT(makeTable()) );
}

void TableDialog::makeTable()
{
    table->setShowGrid(true);
    ncol = (rand() % 5) + 1;
    nrow = (rand() % 10) + 1;
    table->setRowCount(nrow);
    table->setColumnCount(ncol);
    loadData();
}

void TableDialog::loadData()
{
    for (int row = 0; row < nrow; row++) {
        for (int col = 0; col < ncol; col++) {
            QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(rand()%100));
            newItem->setTextAlignment(Qt::AlignCenter);
            table->setItem(row, col, newItem);
        }
    }
}
Надеюсь помог

Иван
8Observer8 вне форума Ответить с цитированием
Старый 11.01.2013, 12:22   #3
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Просто создай двумерный массив QtableWidgetItem и работай с ним. А что бы память выделялась автоматически воспользуйся такой стректурой. QList <QList <QtableWidgetItem *> *> TableItem. Как то так.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 22.06.2014, 11:52   #4
mishe4ka
Новичок
Джуниор
 
Регистрация: 22.06.2014
Сообщений: 1
По умолчанию

В форме создана таблица с 6 колонками.Добавлены кнопки и сигналы привязаны к слотам.
реализация по нажатию клавиши создания строки
Код:
void MainWindow::on_abonButton_clicked()
{
   //создаем константу живущую все время программы
    const int tab_ab_row = ui->tableWidget_2->rowCount();
  //вставляем строку
    ui->tableWidget_2->insertRow(tab_ab_row);
  //только для чтения если надо
  // ui->tableWidget_2->setEditTriggers(QTableWidget::NoEditTriggers);
 
//добавляем ячейки в 1 - 6 столбец
    ui->tableWidget_2->setItem(tab_ab_row,0,new QTableWidgetItem(/*сюда вставляешь что выводить*/));
    ui->tableWidget_2->setItem(tab_ab_row,1,new QTableWidgetItem(/*сюда вставляешь что выводить*/));
    ui->tableWidget_2->setItem(tab_ab_row,2,new QTableWidgetItem(/*сюда вставляешь что выводить*/));
    ui->tableWidget_2->setItem(tab_ab_row,3,new QTableWidgetItem(/*сюда вставляешь что выводить*/));
    ui->tableWidget_2->setItem(tab_ab_row,4,new  QTableWidgetItem(/*сюда вставляешь что выводить*/));
    ui->tableWidget_2->setItem(tab_ab_row,5,new QTableWidgetItem(/*сюда вставляешь что выводить*/));

}
реализация сброса значений в таблице
Код:
void MainWindow::on_ab_clear_Button_clicked()
{


    for (int i=0;i<ui->tableWidget_2>rowCount();++i){
        ui->tableWidget_2->removeRow(i);
        i=i-1;
}
    ui->abonButton->setEnabled(true);
}

Последний раз редактировалось mishe4ka; 22.06.2014 в 12:54.
mishe4ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag&drop строки QTableWidget [PySide] Василевс Помощь студентам 0 26.11.2012 22:35
QTableWidget получить значение PinkPink Помощь студентам 8 22.04.2012 18:29
работа с Qt Creator QCalendarWidget galick Помощь студентам 0 03.04.2012 19:11
работа с PushButton в Qt Creator galick Помощь студентам 0 18.03.2012 06:06
QT Creator mirawoo Общие вопросы C/C++ 2 23.08.2009 16:09