Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [SOLVED] Insert row from Qtableview to another
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] Insert row from Qtableview to another

Scheduled Pinned Locked Moved General and Desktop
68 Posts 3 Posters 34.7k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    advseo32
    wrote on last edited by
    #11

    i want to like the video,

    https://www.youtube.com/watch?v=hkfmZwuc-YY

    when the user entre data new row created

    i can't post so i have modified this post

    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()
    {

    }
    @

    1 Reply Last reply
    0
    • JKSHJ Offline
      JKSHJ Offline
      JKSH
      Moderators
      wrote on last edited by
      #12

      When the user enters data, the QTableWidget will emit some "signals":http://qt-project.org/doc/qt-5.1/qtwidgets/qtablewidget.html#signals. You should create your own slot to handle the signal(s) that you want.

      Connect the signal to your slot. Inside your slot, call call "QTableWidget::insertRow()":http://qt-project.org/doc/qt-5.1/qtwidgets/qtablewidget.html#insertRow

      Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

      1 Reply Last reply
      0
      • A Offline
        A Offline
        advseo32
        wrote on last edited by
        #13

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

        @

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #14

          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.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • A Offline
            A Offline
            advseo32
            wrote on last edited by
            #15

            i want to add it at the end of the table every time

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #16

              Then change 1 by tableNouveau->rowCount()

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • A Offline
                A Offline
                advseo32
                wrote on last edited by
                #17

                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

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  advseo32
                  wrote on last edited by
                  #18

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

                  @

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #19

                    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 ?

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      advseo32
                      wrote on last edited by
                      #20

                      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

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        advseo32
                        wrote on last edited by
                        #21

                        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 "

                        1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #22

                          It is explained in the function documentation

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0
                          • A Offline
                            A Offline
                            advseo32
                            wrote on last edited by
                            #23

                            i still can't know what i do ,

                            subclass Qtablewidget and implement keypressevent
                            or use shortcuts .

                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #24

                              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

                              Interested in AI ? www.idiap.ch
                              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              0
                              • A Offline
                                A Offline
                                advseo32
                                wrote on last edited by
                                #25

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

                                }
                                @

                                1 Reply Last reply
                                0
                                • SGaistS Offline
                                  SGaistS Offline
                                  SGaist
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #26

                                  @removeRow(1); << What would happen if you don't have a row number 1 ?@

                                  Interested in AI ? www.idiap.ch
                                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  1 Reply Last reply
                                  0
                                  • A Offline
                                    A Offline
                                    advseo32
                                    wrote on last edited by
                                    #27

                                    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

                                    1 Reply Last reply
                                    0
                                    • A Offline
                                      A Offline
                                      advseo32
                                      wrote on last edited by
                                      #28

                                      [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 works

                                      thank's for the hint

                                      1 Reply Last reply
                                      0
                                      • A Offline
                                        A Offline
                                        advseo32
                                        wrote on last edited by
                                        #29

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

                                        @

                                        1 Reply Last reply
                                        0
                                        • A Offline
                                          A Offline
                                          advseo32
                                          wrote on last edited by
                                          #30

                                          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 ??

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved