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.5k 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
    #58

    Her is my code , after your advices

    @void MonTableauWidget::keyPressEvent(QKeyEvent *event)
    {

    int LastRow =qMax(0,this->rowCount()-1);
    int CurrentRow = this->currentRow() ;
    bool isCurrentRowLast = (LastRow == CurrentRow);
    bool isCurrentCellEmpty = this->item(LastRow,1) == 0;
    QTableWidgetItem * item = new QTableWidgetItem() ;
    switch (event->key()) {
    case Qt::Key_Down :
        if( !isCurrentCellEmpty)
          (isCurrentRowLast) ? this->insertRow(this->rowCount()) : QTableWidget::keyPressEvent(event) ;
        else
          QTableWidget::keyPressEvent(event);
        break;
    case Qt::Key_Up :
        if(LastRow > 0 && isCurrentCellEmpty)
         isCurrentRowLast ? this->removeRow(LastRow) : QTableWidget::keyPressEvent(event) ;
        else
          QTableWidget::keyPressEvent(event);
        break;
    default:
        item->setIcon( *(new QIcon("imgs/Edit-icon.png")));
        this->setVerticalHeaderItem(CurrentRow,item);
        QTableWidget::keyPressEvent(event);
        break;
    }
    

    }@

    1 Reply Last reply
    0
    • JKSHJ Offline
      JKSHJ Offline
      JKSH
      Moderators
      wrote on last edited by
      #59
      1. This is a memory leak:
        @
        item->setIcon( *(new QIcon("imgs/Edit-icon.png")));
        @
        setIcon() will make a copy of your icon, but the original stays in memory forever.

      2. Your variable names have mixed style -- some start with upper-case (e.g. CurrentRow), but some start with lower-case (e.g. isCurrentRowLast). Choose one style and don't mix them.

      In Qt's style, all function names and variable names start with lower-case, and all class names start with upper-case.

      1. Your checking is complicated:
        @
        if( !isCurrentCellEmpty)
        (isCurrentRowLast) ? this->insertRow(this->rowCount()) : QTableWidget::keyPressEvent(event) ;
        else
        QTableWidget::keyPressEvent(event);
        @
        Just write if (!isCurrentCellEmpty && isCurrentRowLast). Your other case has the same issue.

      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
        #60

        Ok

        this my final version (Thank's for your advices )

        @void MonTableauWidget::keyPressEvent(QKeyEvent *event)
        {

        int LastRow =qMax(0,this->rowCount()-1);
        int CurrentRow = this->currentRow() ;
        bool IsCurrentRowLast = (LastRow == CurrentRow);
        bool IsCurrentCellEmpty = this->item(LastRow,1) == 0;
        QTableWidgetItem * item = new QTableWidgetItem() ;
        QIcon *ShowEditSignIcon = new QIcon("imgs/Edit-icon.png");
        switch (event->key()) {
        case Qt::Key_Down :
            if(IsCurrentRowLast && !IsCurrentCellEmpty)
              this->insertRow(this->rowCount()) ;
            else
              QTableWidget::keyPressEvent(event);
            break;
        case Qt::Key_Up :
            if(LastRow > 0 && IsCurrentCellEmpty && IsCurrentRowLast)
             this->removeRow(LastRow) ;
            else
              QTableWidget::keyPressEvent(event);
            break;
        default:
            item->setIcon(*ShowEditSignIcon);
            delete ShowEditSignIcon;
            this->setVerticalHeaderItem(CurrentRow,item);
            QTableWidget::keyPressEvent(event);
            break;
        }
        

        }
        @

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

          That looks a lot tidier, well done :)

          You don't have to create a QIcon on the heap with new QIcon(). Just create it on the stack (no pointer) with QIcon ShowEditSignIcon("imgs/Edit-icon.png"); -- then you don't have to delete it yourself.

          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
            #62

            Thank's JKSH and SGaist, now i can be said, i have figured out more than 30% of Model/view architecture in Qt

            if i have another question, i will post her , i will create another thread ?

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

              You're welcome. Good luck with Qt programming. :)

              You should start new threads for new topics. Remember to provide details of what you already tried.

              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
                #64

                i start use the same strategy as we did with Qtablewidget but

                there is no setVerticalHeaderItem(row,item) function like Qtablewidget(it seems that QtableWidget is very easy than Qtableview

                my question her :

                should i sublcass QHeaderView class and implement neccessary function
                after setting up vertical header @setVerticalHeader(QHeaderView * header)@

                or i can use another solution with out subclassing QheaderView ???

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

                  i have used this but no thing happened

                  i use Qtableview with Qsqlquerymodel

                  her is my code
                  @ui->tableView->verticalHeader()->model()->
                  setData(ui->tableView->verticalHeader()->model()->index(1,1),"**",Qt::DisplayRole) ;
                  @

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

                    [quote author="advseo32" date="1375355486"]if i have another question, i will post her , i will create another thread ?[/quote]Why did you ask this question and then ignore my answer?

                    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
                      #67

                      i have posted this question because is similaire topic but now is Qtableview

                      Sorry, if i'm wrong , i will post another thread :)

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

                        [quote author="advseo32" date="1375434213"]i have posted this question because is similaire topic but now is Qtableview

                        Sorry, if i'm wrong , i will post another thread :)[/quote]Yes, please post in a new thread. It is NOT similar.

                        Each thread is supposed to have 1 topic, but you already have 5 topics:

                        How to automatically insert a row at the end when the user clicks/presses a key there

                        How to check if a cell is empty

                        How to add custom symbols to the vertical header

                        How to check if the user selects a different row

                        How to check if the user has started typing into a row

                        (Your new topic) How to modify headers

                        The title of this thread is "Insert row from Qtableview to another", but topics 2-6 are not related to this.

                        Forums let users search old topics to find solutions solutions. But, if a thread has many topics that are not related to the title, it's hard for someone to search.

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

                        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