Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: автозаполнение в QTableWidget
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
mettamo
Здрасте!

Есть пустая таблица QTableWidget

необходимо что бы по вводу значения допустим в ячейке [1,3], это же значение помещалось в ячейку [3,1]

пробовал сделать так

void MainWindow::on_TabG_cellChanged(int row,int column)
{
   ui->TabG->item(column,row)->setText(ui->TabG->item(row,column)->text());
}


но так не получается.

помогите разобраться(((
Litkevich Yuriy
Цитата(mettamo @ 23.10.2009, 0:48) *
но так не получается.
а что получается?
mettamo
Цитата(Litkevich Yuriy @ 22.10.2009, 23:45) *
Цитата(mettamo @ 23.10.2009, 0:48) *
но так не получается.
а что получается?

прога слетает, вообщем нечего нечего не получается
BRE
Цитата(mettamo @ 23.10.2009, 0:14) *
прога слетает, вообщем нечего нечего не получается

Так и должно быть. ;)
Если таблица пустая, то конструкция ui->TabG->item(column,row) будет возвращать 0.
mettamo
Цитата(BRE @ 23.10.2009, 9:14) *
Цитата(mettamo @ 23.10.2009, 0:14) *
прога слетает, вообщем нечего нечего не получается

Так и должно быть. ;)
Если таблица пустая, то конструкция ui->TabG->item(column,row) будет возвращать 0.


А как ее заполнить?
zamnach
в условиях вашей задачи не описано требуемое поведение проги для случая (column==row)
+ таблица может быть неквадратной, тоже нужны проверки
mettamo
Цитата(zamnach @ 23.10.2009, 15:21) *
в условиях вашей задачи не описано требуемое поведение проги для случая (column==row)
+ таблица может быть неквадратной, тоже нужны проверки


таблица квадратная
mettamo
Думал это простой вопрос, а никто ответить не может.
BRE
Цитата(mettamo @ 23.10.2009, 18:02) *
Думал это простой вопрос, а никто ответить не может.

Для того, что бы получить item из QTableWidget, вначале нужно его установить QTableWidget::setItem.
Если элемент не установлен, то метод QTableWidget::item будет возвращать 0.

Теперь посмотри на свой код:
ui->TabG->item(column,row)->setText(ui->TabG->item(row,column)->text());

mettamo
void MainWindow::on_TableGraf_cellChanged(int row, int column)
{
    ui->TableGraf->item(row,column)->setBackgroundColor(Qt::green);
    QTableWidgetItem *newItem = new QTableWidgetItem(QTableWidgetItem::UserType);
    ui->TableGraf->setItem(column,row, newItem);
    ui->TableGraf->item(column,row)->setText(ui->TableGraf->item(row,column)->text());


}


вот устанавливается Item но все равно не работает
BRE
Цитата(mettamo @ 23.10.2009, 18:27) *
вот устанавливается Item но все равно не работает

Не работает как: программа падает?
mettamo
просто сразу же закрывается, не знаб как описать по другому

может подключить надо что-то?
BRE
Цитата(mettamo @ 23.10.2009, 18:32) *
может подключить надо что-то?

Точно, внимательность. ;)

void MainWindow::on_TableGraf_cellChanged(int row, int column)
{

ui->TableGraf->item(row,column)->setBackgroundColor(Qt::green);    // !!! Вот здесь элемента еще нет и item вернет 0.
                                                        // !!! Соответственно ты по нулевому указателю метод вызываешь.

QTableWidgetItem *newItem = new QTableWidgetItem(QTableWidgetItem::UserType);
ui->TableGraf->setItem(column,row, newItem);
ui->TableGraf->item(column,row)->setText(ui->TableGraf->item(row,column)->text());


}
mettamo
Командир не в этом дело, все ровно не пашет, запусти пожалуйста у себя Qt попробуй просто очень надо, весь инет перерыл - нет ответа.
BRE
Цитата(mettamo @ 23.10.2009, 18:41) *
Командир не в этом дело, все ровно не пашет, запусти пожалуйста у себя Qt попробуй просто очень надо, весь инет перерыл - нет ответа.

Покажи больше кода. Создание/заполнение QTableWidget и использование.
mettamo
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QColor>
#include <QTableWidgetItem>
#include "math.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindowClass)
{
    ui->setupUi(this);
}

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

void MainWindow::on_pushButton_clicked()//сам QTableWidget я в QtCreatorе на форму кидаю
{
ui->TableGraf->setColumnCount(ui->lineEdit->text().toInt());
ui->TableGraf->setRowCount(ui->lineEdit->text().toInt());
for (int i=0;i<=ui->lineEdit->text().toInt();i++)
    {
        ui->TableGraf->setColumnWidth(i,25);
        ui->TableGraf->setRowHeight(i,25);

    }
ui->TableGraf->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
}


void MainWindow::on_TableGraf_cellChanged(int row, int column)
{
    //ui->TableGraf->item(row,column)->setBackgroundColor(Qt::green);
    QTableWidgetItem *nwItem = new QTableWidgetItem(QTableWidgetItem::UserType);
    ui->TableGraf->setItem(column,row, nwItem);
    ui->TableGraf->item(column,row)->setText("h");
    //ui->TableGraf->item(column,row,new QTableWidgetItem(tr("[none]")));

}
BRE
Цитата(mettamo @ 23.10.2009, 19:02) *
void MainWindow::on_pushButton_clicked()//сам QTableWidget я в QtCreatorе на форму кидаю
{
ui->TableGraf->setColumnCount(ui->lineEdit->text().toInt());
ui->TableGraf->setRowCount(ui->lineEdit->text().toInt());

// Почему <=, должно быть <
for (int i=0;i <= ui->lineEdit->text().toInt();i++)
{
ui->TableGraf->setColumnWidth(i,25);
ui->TableGraf->setRowHeight(i,25);

}
ui->TableGraf->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
}


Так когда программа падает? Когда кнопку нажимаешь или когда значение меняешь?
mettamo
когда значение меняешь.
BRE
Все ясно. Возникает рекурсия, поэтому нужно блокировать сигналы на время установки элемента.
Раскрывающийся текст

#include <QApplication>                                                                                                   
#include <QWidget>                                                                                                        
#include <QTableWidget>                                                                                                  
#include <QLayout>                                                                                                        
#include <QDebug>                                                                                                        

class Widget : public QWidget
{                            
        Q_OBJECT            
public:                      
        Widget() : QWidget( 0 )
        {                      
                QVBoxLayout *layout = new QVBoxLayout( this );
                m_table = new QTableWidget( this );
                m_table->setRowCount( 5 );
                m_table->setColumnCount( 5 );
                connect( m_table, SIGNAL( cellChanged( int, int ) ), SLOT( cellChanged( int, int ) ) );

                layout->addWidget( m_table );

                setLayout( layout );
        }

public slots:
        void    cellChanged( int row, int column )
        {
                qDebug() << "Changed item" << row << column << m_table->item( row, column );
                QTableWidgetItem *item = new QTableWidgetItem;
                item->setText( "Test" );
                m_table->blockSignals( true );
                m_table->setItem( column, row, item );
                m_table->blockSignals( false );
        }

protected:
        QTableWidget    *m_table;
};

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

        Widget w;
        w.show();

        return app.exec();
}

#include "main.moc"

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.