使用qvector将QTableWidgetItems从一个表Widget传输到另一个表
Transferring QTableWidgetItems from one tableWidget to another using a qvector
我的程序遇到了一个问题,我不知道如何解决。问题是我在两个类中有一个Qtablewidget,我使用信号和槽机制来传输一个QVector,它包含一个类中的QTablewidgetItems,并将其放置在其他类Qtablewidget中。我遇到的问题是,当我按下一个类上的传输按钮时,没有数据传输。有人能告诉我问题出在哪里吗?因为我被难住了。以下代码:
主窗口.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "editmode1.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
Ui::MainWindow *ui;
public slots:
void setTableDataSlot(int width, int height, QVector<QTableWidgetItem*>const& EditData);
private slots:
void on_actionEdit_Mode_triggered();
private:
EditMode1 *mEdit;
};
#endif // MAINWINDOW_H
EditMode1.h:
#ifndef EDITMODE1_H
#define EDITMODE1_H
#include <QDialog>
#include <QTableWidget>
namespace Ui {
class EditMode1;
}
class EditMode1 : public QDialog
{
Q_OBJECT
public:
explicit EditMode1(QWidget *parent = 0);
~EditMode1();
signals:
void setTableDataSignal(int width, int height, QVector<QTableWidgetItem*> const& EditData)
private slots:
void on_buttonBox_accepted();
void on_buttonBox_rejected();
private:
Ui::EditMode1 *Editui;
};
#endif // EDITMODE1_H
MainWindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QApplication>
#include <QDesktopWidget>
#include <QCoreApplication>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->tableWidget->setRowCount(6);
ui->tableWidget->setColumnCount(5);
for(int i = 0;i<ui->tableWidget->rowCount();++i){
for(int j = 0;j<ui->tableWidget->columnCount();++j){
QTableWidgetItem *tableitem = new QTableWidgetItem(" ");
ui->tableWidget->setItem(i,j,tableitem);
}
}
}
MainWindow::~MainWindow()
{
}
void MainWindow::on_actionEdit_Mode_triggered()
{
mEdit = new EditMode1(this);
connect(mEdit,SIGNAL (setTableDataSignal(int width, int height, QVector<QTableWidgetItem*> const& EditData)),this,
SLOT(setTableDataSlot(int width, int height,QVector<QTableWidgetItem*>const& EditData)));
mEdit->show();
}
void MainWindow::setTableDataSlot(int width, int height,QVector<QTableWidgetItem*>const& EditData){
for(int i = 0; i<height;++i){
for(int j = 0; j<width;++j){
QTableWidgetItem* copieditem = new QTableWidgetItem( *EditData[i*height + j]) ;
ui->tableWidget->setItem(i,j,copieditem);
}
}
}
EditMode1.cpp:
#include "ui_mainwindow.h"
#include "mainwindow.h"
#include "editmode1.h"
#include "ui_editmode1.h"
int rows = 6;
int columns = 5;
EditMode1::EditMode1(QWidget *parent) :
QDialog(parent),
Editui(new Ui::EditMode1)
{
Editui->setupUi(this);
for (int i=0; i<rows;++i){
for(int j = 0; j<columns;++j){
QTableWidgetItem *blankitem = new QTableWidgetItem(" ");
Editui->tableWidget->setItem(i,j,blankitem);
}
}
}
EditMode1::~EditMode1()
{
delete Editui;
}
void EditMode1::on_buttonBox_accepted()
{
QVector <QTableWidgetItem*> AllItems;
for (int i=0; i<rows;++i){
for(int j = 0; j<columns;++j){
AllItems.push_back(Editui->tableWidget->item(i,j));
}
}
emit setTableDataSignal(columns,rows,AllItems);
}
void EditMode1::on_buttonBox_rejected()
{
reject();
}
很抱歉有很多代码,但我不知道程序的哪个部分导致它什么都不产生,我认为显示所有代码会让其他人更容易调试。提前感谢!
您可能想要用数据来表示区域维度,因此信号应该类似于:
signals:
void setTableDataSignal(
int width, int height, const QVector<QTableWidgetItem*>& EditData);
要发送信号,请尝试:
void EditMode1::on_buttonBox_accepted()
{
QVector <QTableWidgetItem*> AllItems;
for (int y = 0; y < rows; ++y )
{
for( int x = 0; x < columns; ++x )
{
AllItems.push_back( Editui->tableWidget->item(x,y) );
}
}
emit setTableDataSignal( columns, rows, AllItems );
}
在接收小部件中,您应该执行以下操作:
void MainWindow::setTableDataSlot(
int width, int height, const QVector<QTableWidgetItem*>& EditData)
{
for(int y = 0; y < height; ++y)
{
for(int x = 0; x < width; ++x)
{
QTableWidgetItem* copieditem = new QTableWidgetItem( *EditData[y*height + x]) ;
ui->tableWidget->setItem( x, y, copieditem );
}
}
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '