Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-通过另一个TableWidget向TableWidget添加数据_C++_Qt_Qtablewidget - Fatal编程技术网

C++ Qt-通过另一个TableWidget向TableWidget添加数据

C++ Qt-通过另一个TableWidget向TableWidget添加数据,c++,qt,qtablewidget,C++,Qt,Qtablewidget,我被表格小部件的某个问题困住了,我需要帮助。基本上,我试图在对话屏幕上获取一个表小部件,以获取其中的信息,然后将该信息填充到主窗口屏幕上的另一个表小部件上。因此,当我单击OK按钮时,它应该从一个table小部件中获取文本并将其放置在另一个table小部件中。我尝试使用下面的代码,构建运行了。但是,我一点击OK,程序就崩溃了。名为TableWidgetedit的表是我试图复制并发送到主窗口中名为tablewidget的表。(为了避免含糊不清,当用户单击“确定”按钮时,我尝试从一个表复制数据并将其放

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

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
\ifndef tabledialougeewindow\u
#定义TABLEDIALOUGEWINDOW\u H
#包括
名称空间用户界面{
类TableDialougeWindow;
}
类TableDialougeWindow:公共QDialog
{
Q_对象
公众:
显式TableDialougeWindow(QWidget*parent=0);
~TableDialougeWindow();
专用插槽:
按钮盒上的无效已接受();
私人:
Ui::TableDialougeWindow*Ui;
};
#endif//tabledialougeewindow\u 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();
}
#包括“tabledialougewindow.h”
#包括“ui_tabledialougewindow.h”
#包括“tablemainwindow1.h”
#包括“ui_tablemainwindow1.h”
int行=3;
int列=3;
Ui::TableMainWindow1*mainui;
TableDialougeWindow::TableDialougeWindow(QWidget*父项):
QDialog(父级),
ui(新ui::TableDialougeWindow)
{
用户界面->设置用户界面(此);
ui->tableWidget->setRowCount(行);
ui->tableWidget->setColumnCount(列);
}
TableDialougeWindow::~TableDialougeWindow()
{
删除用户界面;
}
void tabledialougeewindow::on_buttonBox_accepted()
{
对于(int i=0;i项(j,i);
QTableWidgetItem*celltxt2=新的QTableWidgetItem(*celltxt);
mainui->tableWidget->setItem(j,i,celltxt2);
}
}
接受();
}

希望这有帮助。

错误在于我们无法插入已由另一个QTableWidget拥有的项。因此,在进行复制之前,我们需要克隆数据。我们可以使用复制构造函数来实现此目的。代码注释将详细解释。希望获得此帮助

    void MainWindow::on_cmdTransfer_clicked()
{
    //Source Table
    int rows = ui->tbl1->rowCount();
    int columns =ui->tbl1->columnCount();

    //Destination Table
    ui->tbl2->setColumnCount(columns);
    ui->tbl2->setRowCount(rows);

   //Copy data form one table to another.
   for (int i = 0; i<columns;++i){
       for (int j = 0;j<rows;++j){
         QTableWidgetItem *celltxt= ui->tbl1->item(j,i);
         //Clone the data using copy constructor
         QTableWidgetItem *celltxt1=new QTableWidgetItem(*celltxt);
         ui->tbl2->setItem(j,i,celltxt1);
       }
    }
}
void主窗口::在_cmdTransfer_clicked()上
{
//源表
int rows=ui->tbl1->rowCount();
int columns=ui->tbl1->columnCount();
//目的表
ui->tbl2->setColumnCount(列);
ui->tbl2->setRowCount(行);
//将数据从一个表复制到另一个表。
对于(int i=0;i项(j,i);
//使用复制构造函数克隆数据
QTableWidgetItem*celltxt1=新的QTableWidgetItem(*celltxt);
ui->tbl2->setItem(j,i,celltxt1);
}
}
}

哇,非常感谢!我正试图复制和粘贴它,但不太确定如何使用qt,非常感谢!-更新-我尝试输入此代码,但我的程序仍然崩溃(当我说崩溃时,我的意思是它编译并运行程序,但当我点击按钮从一个表复制到另一个表时,它只是说“program.exe已停止工作”)。这是因为一个表在主窗口屏幕上,而另一个表在对话屏幕上吗?@KittyBurner,没有看到您的类(主窗口和对话框)结构,很难说如何将对象从一个引用到另一个。好的,你能告诉我你到底想看到什么吗?因为当你说没有看到我的类结构时,我也不确定你引用的是什么部分。你能不能创建一个小的实现,并与qtable(静态)共享这两个类数据,这会在副本上产生错误?如果是这样,我可以尝试从我这边找到并纠正错误。
#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
#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();
}
    void MainWindow::on_cmdTransfer_clicked()
{
    //Source Table
    int rows = ui->tbl1->rowCount();
    int columns =ui->tbl1->columnCount();

    //Destination Table
    ui->tbl2->setColumnCount(columns);
    ui->tbl2->setRowCount(rows);

   //Copy data form one table to another.
   for (int i = 0; i<columns;++i){
       for (int j = 0;j<rows;++j){
         QTableWidgetItem *celltxt= ui->tbl1->item(j,i);
         //Clone the data using copy constructor
         QTableWidgetItem *celltxt1=new QTableWidgetItem(*celltxt);
         ui->tbl2->setItem(j,i,celltxt1);
       }
    }
}