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