Qt — Копирование данных QTableWidget и вставка их в другой QTableWidget

Я задал вопрос, очень похожий на этот, но тот, кто ответил, оказал небольшую помощь, и я не смог решить свою проблему. Я думал, что снова задам вопрос, так как никто не ответил на мою проблему. Я хотел бы знать, как скопировать данные QTableWidget из одного окна в другое QTableWidget в другом окне.

Так, например, я набрал бы «TableWidget1», а затем одним нажатием кнопки копирует данные из «TableWidget1» и вставляет их в «TableWidget2» в другом окне. У меня есть код ниже, который я пытался использовать, и когда я скомпилировал программу, она работала нормально, пока не была нажата кнопка «копировать и вставить», а затем просто зависала.

Вот код (есть много, извините):

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();
}

Любая помощь приветствуется. благодарю вас.

0

Решение

Попробуйте запустить приложение в отладчике и проверить, где именно оно падает.

Я вижу, что вы устанавливаете количество строк и столбцов, но вы никогда не создаете фактические элементы. насколько мне известно QTableWidget не создает предметы для вас. Может быть, этот вызов просто возвращается nullptr?

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]