2011-02-07 2 views
1

Je crée une application simple avec une table et un bouton "Ajouter une ligne". En utilisant Qt Creator je pensais que je peux faire quelque chose comme ceci:C++, ajouter/supprimer des lignes d'un QTableWidget

QObject::connect(ui->addRowButton, SIGNAL(clicked()), 
        ui->moneyTableWidget, SLOT(insertRow(1))); 

Mais je ne peux pas. Je suis vraiment nouveau à Qt et je peux me tromper, mais je pense que le problème est que insertRow n'est pas une méthode SLOT pour QTableWidget ...

Comment puis-je obtenir l'insertion de ligne?

Répondre

6

Insérez la ligne dans une méthode de votre classe. Essayez cette

class TableDialog : public QDialog 
{ 
    Q_OBJECT 
public: 
    TableDialog(QWidget *parent = 0); 
private slots: 
    void addRow(); 
private: 
    QTableWidget *tableWidget; 
    QDialogButtonBox *buttonBox; 
}; 

Et la (partielle) la mise en œuvre:

TableDialog::TableDialog(QWidget *parent) : QDialog(parent) { 
tableWidget = new QTableWidget(10, 2); 
/* ..... */ 
connect(addRowButton, SIGNAL(clicked()), this, SLOT(addRow())); 

/* ..... */ 
} 

void TableDialog::addRow() { 
    int row = tableWidget->rowCount(); 
    tableWidget->insertRow(row); 
/* ..... */ 
} 
1

L'argument de la SLOT() macro est une signature de méthode avec les types d'argument uniquement. Il ne peut pas contenir de noms d'arguments ou d'arguments réels à transmettre au slot. C'est pourquoi vous avez besoin d'un emplacement supplémentaire pour effectuer cela, selon la réponse de nc3b. Ce que votre code essaie de faire est de connecter le signal à un slot avec un paramètre qui a le type "1" qui est faux pour deux raisons: vous n'avez pas un tel slot et "1" n'est pas un nom de type valide en tous cas.

En outre, QTableWidget :: insertRow() est un emplacement, comme il est répertorié dans the public slots group dans les docs. Vous pouvez donc lui connecter un signal, mais le signal doit avoir un argument int pour que les signatures correspondent.

Questions connexes