#include class myMainWindow:public QWidget { Q_OBJECT public: myMainWindow() { tableWidget = new QTableWidget(2,0); QPushButton *pb = new QPushButton("Add"); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(tableWidget); layout->addWidget(pb); setLayout(layout); connect(pb,SIGNAL(clicked()),this,SLOT(addMoreColumn())); } public slots: void addMoreColumn() { QTableWidgetItem* itemRow0Column0 = tableWidget->item(0, 0); if (NULL == itemRow0Column0) { tableWidget->insertColumn(0); itemRow0Column0 = new QTableWidgetItem(QTableWidgetItem::UserType); itemRow0Column0->setText("row 0, column 0"); tableWidget->setItem(0, 0, itemRow0Column0); } QTableWidgetItem* itemRow1Column0 = tableWidget->item(1, 0); if (NULL == itemRow1Column0) { itemRow1Column0 = new QTableWidgetItem(QTableWidgetItem::UserType); itemRow1Column0->setText("row 1, column 0"); tableWidget->setItem(1, 0, itemRow1Column0); } QTableWidgetItem* headerItem0 = new QTableWidgetItem(QTableWidgetItem::UserType); headerItem0->setText("Column 0"); tableWidget->setHorizontalHeaderItem(0, headerItem0); QTableWidgetItem* itemRow0Column1 = tableWidget->item(0, 1); if (NULL == itemRow0Column1) // it must be null! I never insert an item for that cell! { tableWidget->insertColumn(1); itemRow0Column1 = new QTableWidgetItem(QTableWidgetItem::UserType); itemRow0Column1->setText("row 0, column 1"); tableWidget->setItem(0, 1, itemRow0Column1); } else { QString debug = itemRow0Column1->text(); // here debug is "row 1, column 0" !!!! qDebug()<<" item at (row 1, column 0) is returned instead of item at (row 0, column 1)"; } } public: QTableWidget *tableWidget; }; #include "main.moc" int main(int argc, char *argv[]) { QApplication a(argc, argv); myMainWindow mainWindow; mainWindow.show(); return a.exec(); }