[SOLVED] Insert row from Qtableview to another
-
i can’t control the addition of rows
her is my code
@
#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { tableNouveau = new QTableWidget; tableNouveau->setRowCount(1); tableNouveau->setColumnCount(5); QStringList list ; list <<"N°"<< "Désignation" << "Qte" << "Prix/U" << "Totale" ; tableNouveau->setHorizontalHeaderLabels(list); connect(tableNouveau,SIGNAL(cellClicked(int,int)),this,SLOT(test(int,int))) ; QVBoxLayout *layoutPrincipale = new QVBoxLayout ; layoutPrincipale->addWidget(tableNouveau); setLayout(layoutPrincipale); } void MainWindow::test(int row, int col) { // if(!tableNouveau->item(row,col)->text().isEmpty()) if(col==1) { tableNouveau->insertRow(1); } } MainWindow::~MainWindow() { }
@
-
What do you mean by "I can't control" ?
The code here will add a new row at row number 1 each time you click on a cell in the column 1.
-
i want to add it at the end of the table every time
-
Then change 1 by tableNouveau->rowCount()
-
Wow, this works
Now, what i want exactly is
the user isn't able to add row until he fills all cells
then he clicks "Key_Down" to add new row ( so her i will catch Qkeypressevent)
Plz give somme hints, so i will try to implement this my selef and render the code for you to correct me
thank's a lot SGaist
-
i have tried to inherif from Qtablewidget and override keypressevent function
i have declared keypressevent function as signal
it works with this condition
@if ( event->key() == Qt::key_Down)@but when i add more conditions the app crached
her is my code
customtablewidget class @class MonTableauWidget : public QTableWidget
{
Q_OBJECT
public:
explicit MonTableauWidget(QWidget *parent = 0);signals:
void keyPressEvent(QKeyEvent *event);
public slots:};
@the main of classe @#include "montableauwidget.h"
MonTableauWidget::MonTableauWidget(QWidget *parent) :
QTableWidget(parent)
{}
@
and her is my main where i tried to connect siganl with slot @#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QWidget(parent)
{
layoutPrincipale = new QVBoxLayout(this);
QPushButton *button = new QPushButton("Clear",this);
tableau = new MonTableauWidget(this);
tableau->setRowCount(1);
tableau->setColumnCount(4) ;
QKeyEvent event(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier);QStringList list ; list << "Désignation" << "Qte" << "Prix/U" << "Total"; tableau->setHorizontalHeaderLabels(list); layoutPrincipale->addWidget(tableau); layoutPrincipale->addWidget(button); setLayout(layoutPrincipale); connect(tableau,SIGNAL(cellChanged(int,int)),this,SLOT(addrow(int,int))) ; connect(tableau,SIGNAL(keyPressEvent(QKeyEvent*)),this,SLOT(newRecod(QKeyEvent*))); connect(button,SIGNAL(clicked()),tableau,SLOT(clear()));
}
Dialog::~Dialog()
{}
void Dialog::addrow(int row, int col)
{
if(col == 0)
tableau->insertRow(tableau->rowCount());
}
// her is the problem
void Dialog::newRecod(QKeyEvent *record)
{
QModelIndex index = tableau->currentIndex();
int row = index.column();
if(record->key() == Qt::Key_Down)
if(tableau->item(row,0)->text().isEmpty())
QMessageBox::information(this,"Empty Designation","Please Fill in the cell");
else
tableau->insertRow(tableau->rowCount());
}@
-
keyPressEvent is not a signal, I would advise you to read its "documentation":http://qt-project.org/doc/qt-4.8/qabstractitemview.html#keyPressEvent
From your previous posts, and just to be sure, do you expect me to validate your work ?
-
bq. From your previous posts, and just to be sure, do you expect me to validate your work ?
sorry about that, i'm completely newbie , i have blocked to get a solution for my probelem to complete my first application
-
if i can't use keypressevent() as a signal
how i can handle this event " when the uesr click Key_Down new row added in the bottom "
-
It is explained in the function documentation
-
i still can't know what i do ,
subclass Qtablewidget and implement keypressevent
or use shortcuts . -
You can also use an event filter to catch that event, this really is up to you to choose the solution that meets your need
-
i have implemented keypressEvent function
and it works perfectly, but when i start to somme conditions the programme crashes
her is my code @void MonTableauWidget::keyPressEvent(QKeyEvent *event)
{
int LastRow = this->rowCount();switch (event->key()) { case Qt::Key_Down : // the problem occured when i added the line below if(!this->item(LastRow,0)->text().isEmpty()) this->insertRow(this->rowCount()); break; case Qt::Key_Up : this->removeRow(1); break; case Qt::Key_0 : QMessageBox::information(this,"Row coutn",QString::number( LastRow)) ; break; default: QTableWidget::keyPressEvent(event); break; }
}
@ -
@removeRow(1); << What would happen if you don't have a row number 1 ?@
-
i have used the debugger to determine what's the issue
and i think the issue is located her
because when i delete this line every thing works perfectly
@this->item(LastRow,0)->text().isEmpty() ;@this not refering to the customQtableWidget it's reffering to the
QtableWidgetItem objet -
[quote author="SGaist" date="1374875944"]@removeRow(1); << What would happen if you don't have a row number 1 ?@[/quote]
nothing is happened , means no row have to removed , but i have correct this issue
@this->removeRow(this->rowCount()-1); @
and this should works , and finally it worksthank's for the hint
-
her is my finall code @void MonTableauWidget::keyPressEvent(QKeyEvent *event)
{
int LastRow = this->rowCount()-1;// bool ok = this->item(LastRow,0)->text().isEmpty() ;
switch (event->key()) { case Qt::Key_Down : if(LastRow) this->insertRow(this->rowCount()); break; case Qt::Key_Up : this->removeRow(LastRow); break; default: QTableWidget::keyPressEvent(event); break; }
@
-
i lost hope to get the solution from my self,
the only problem now is how to test if Cell is Empty
i use this
@this->item(row,col)->text().isEmpty(); @
but the programme crashes , what the probleme her ??
-
[quote author="advseo32" date="1374923562"]
@this->item(row,col)->text().isEmpty(); @but the programme crashes , what the probleme her ??[/quote]If there is no data in the cell, then this->item() returns NULL.
Your program will crash if you dereference a null pointer.
-
[quote author="JKSH" date="1374928103"][quote author="advseo32" date="1374923562"]
@this->item(row,col)->text().isEmpty(); @but the programme crashes , what the probleme her ??[/quote]If there is no data in the cell, then this->item() returns NULL.
Your program will crash if you dereference a null pointer.
[/quote]
Yeah! that's true , because QTableWidgetItem was created only when the user fill in the cell
do you have another way to check if the cell if not empty