Qt - 通过另一个TableWidget将数据添加到TableWidget

时间:2016-02-06 15:30:12

标签: c++ qt qtablewidget

我遇到了桌面小部件的某个问题,我需要帮助。基本上,我试图在对话框屏幕上获取表格小部件以获取其中的信息,然后将该信息填充到主窗口屏幕上的另一个表格小部件。因此,当我单击“确定”按钮时,它应该从一个表小部件中获取文本并将其放在另一个表小部件中。我尝试使用下面的代码,并运行构建。但是,只要我点击OK,程序就会崩溃。名为TableWidgetedit的表是我要复制的表,并发送到主窗口中的表,名为tablewidget。 (只是为了使我不是模糊的,我试图从一个表中复制数据并将其放在另一个表中,当用户点击“确定”按钮时。)

    int rows = 6;
    int columns = 5;
    Ui::MainWindow *mainui;
    void EditMode1::on_pushButton_clicked()
    {
       for (int i = 0; i<columns;++i){
           for (int j = 0;j<rows;++j){
             QTableWidgetItem *celltxt= TableWidgetedit.item(j,i);
             mainui->tableWidget->setItem(j,i,celltxt);
           }
        } 
    }

感谢任何和所有帮助。谢谢! (我对Qt来说不是最好的,所以如果你不介意解释你做了什么改变以及为什么这样做,那将非常有用,谢谢你!)。

-UPDATE- @Jeet这里是我试图做的代码:

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

希望这会有所帮助。

1 个答案:

答案 0 :(得分:0)

错误是我们无法插入已由另一个QTableWidget拥有的项目。因此,在制作副本之前,我们需要克隆数据。我们可以使用复制构造函数来实现这一点。代码评论将详细解释。希望这有帮助。

index.html

enter image description here