Kitty Burner
Kitty Burner

Reputation: 47

Qt - Copying a QTableWidget's Data and Paste it in Another QTableWidget

I asked a question very similar to this but the person who responded gave a small amount of help and I couldn't solve my problem. I thought I would re-ask the question since no-one else has responded to my problem. I would like to know how to copy a QTableWidget's Data from one window to another QTableWidget on a different window.

So for example, I would type into "TableWidget1", then with the click of a button, It copies the data from "TableWidget1" and pastes it in "TableWidget2" on a different window. I have code below which I tried using and when I compiled the program, it worked fine until the copy and paste button was clicked, then it would just crash.

Here is the code (there is a lot, sorry):

tablemainwindow1.h:

#ifndef TABLEMAINWINDOW1_H
#define TABLEMAINWINDOW1_H

#include <QMainWindow>
#include "tabledialougewindow.h"

namespace Ui {
class TableMainWindow1;
}

class TableMainWindow1 : public QMainWindow
{
    Q_OBJECT

public:
    explicit TableMainWindow1(QWidget *parent = 0);
    ~TableMainWindow1();

private slots:
    void on_pushButton_clicked();

private:
    Ui::TableMainWindow1 *ui;
    TableDialougeWindow *tbl2;
};

#endif // TABLEMAINWINDOW1_H

tablemainwindow1.cpp:

#include "tablemainwindow1.h"
#include "ui_tablemainwindow1.h"

TableMainWindow1::TableMainWindow1(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::TableMainWindow1)
{
    ui->setupUi(this);
    ui->tableWidget->setRowCount(3);
    ui->tableWidget->setColumnCount(3);
}

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


void TableMainWindow1::on_pushButton_clicked()
{
    tbl2 = new TableDialougeWindow(this);
    tbl2->show();
}

tabledialougewindow.h:

#ifndef TABLEDIALOUGEWINDOW_H
#define TABLEDIALOUGEWINDOW_H

#include <QDialog>

namespace Ui {
class TableDialougeWindow;
}

class TableDialougeWindow : public QDialog
{
    Q_OBJECT

public:
    explicit TableDialougeWindow(QWidget *parent = 0);
    ~TableDialougeWindow();

private slots:
    void on_buttonBox_accepted();

private:
    Ui::TableDialougeWindow *ui;
};

#endif // TABLEDIALOUGEWINDOW_H

tabledialougewindow.cpp:

#include "tabledialougewindow.h"
#include "ui_tabledialougewindow.h"
#include "tablemainwindow1.h"
#include "ui_tablemainwindow1.h"

int Rows = 3;
int Columns = 3;
Ui::TableMainWindow1 *mainui;
TableDialougeWindow::TableDialougeWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::TableDialougeWindow)
{
    ui->setupUi(this);
    ui->tableWidget->setRowCount(Rows);
    ui->tableWidget->setColumnCount(Columns);
}

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


void TableDialougeWindow::on_buttonBox_accepted()
{
    for(int i = 0;i<Columns;++i){
        for(int j = 0;j<Rows;++j){
            QTableWidgetItem *celltxt = ui->tableWidget->item(j,i);
            QTableWidgetItem *celltxt2 =new QTableWidgetItem(*celltxt);
            mainui->tableWidget->setItem(j,i,celltxt2);
        }
    }
    accept();
}

Any and all help is appreciated. thank you.

Upvotes: 0

Views: 2534

Answers (1)

Georgy Pashkov
Georgy Pashkov

Reputation: 1304

Try launching the application in debugger and checking where exactly it crashes.

I see that you set row count and column count, but you never create the actual items. AFAIK QTableWidget does not create the items for you. Could it be that this call simply returns nullptr?

QTableWidgetItem *celltxt = ui->tableWidget->item(j,i);

Upvotes: 1

Related Questions