Здрасте!
Есть пустая таблица 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());
}
в условиях вашей задачи не описано требуемое поведение проги для случая (column==row)
+ таблица может быть неквадратной, тоже нужны проверки
Думал это простой вопрос, а никто ответить не может.
ui->TabG->item(column,row)->setText(ui->TabG->item(row,column)->text());
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());
}
просто сразу же закрывается, не знаб как описать по другому
может подключить надо что-то?
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());
}
Командир не в этом дело, все ровно не пашет, запусти пожалуйста у себя Qt попробуй просто очень надо, весь инет перерыл - нет ответа.
#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]")));
}
когда значение меняешь.
Все ясно. Возникает рекурсия, поэтому нужно блокировать сигналы на время установки элемента.
#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"
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)