2016-02-06 4 views
0

Je suis bloqué sur un certain problème avec les widgets de table et j'ai besoin d'aide. Fondamentalement, j'essaie d'obtenir un widget de table sur un écran de dialogue pour obtenir l'information à l'intérieur de celui-ci et ensuite remplir cette information sur un autre widget de table sur un écran de la fenêtre principale. Donc, quand je clique sur le bouton OK, il devrait prendre le texte d'un widget de table et le placer dans l'autre widget de la table. J'ai essayé d'utiliser le code ci-dessous, et la construction a couru. Mais, dès que j'ai cliqué sur OK, le programme s'est écrasé. La table appelée TableWidgetedit est la table que j'essaye de copier et envoie à la table dans la mainwindow, appelée tablewidget. (Juste pour faire en sorte que je ne suis pas vague, je suis en train de copier des données à partir d'une table et placez-le dans une autre table, lorsqu'un utilisateur clique sur le bouton OK.)Qt - Ajouter des données à un TableWidget via un autre 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); 
      } 
     } 
    } 

Toute aide est appréciée . Je vous remercie! (Je ne suis pas le meilleur avec Qt donc si cela ne vous dérange pas d'expliquer les changements que vous avez faits et pourquoi, cela vous aidera énormément!).

-UPDATE- @Jeet voici le code pour ce im essayant de faire:

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

espérons que cette aide.

Répondre

0

L'erreur est que nous ne pouvons pas insérer un élément qui appartient déjà à un autre QTableWidget. Donc, avant de faire une copie, nous devons cloner les données. nous pouvons utiliser un constructeur de copie pour y parvenir. Le commentaire de code expliquera en détail. J'espère que cette aide.

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

enter image description here

+0

Wow merci beaucoup! J'essayais de penser à copier et coller, mais je ne savais pas trop comment le faire avec qt, merci beaucoup! –

+0

-UPDATE- J'ai essayé d'entrer ce code, mais mon programme plante toujours (et quand je dis des plantages, je veux dire qu'il compile et exécute le programme, mais quand je clique sur le bouton pour copier d'une table à l'autre Program.exe a cessé de fonctionner "). Est-ce parce qu'une table est sur un écran principal et l'autre table dans un écran de dialogue? –

+0

@KittyBurner, Sans vous voir dans la structure de classe (Mainwindow & Dialog), il est difficile de dire comment référencer l'objet de l'un à l'autre. – Jeet