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. Control highlight of QTableWidget
Forum Updated to NodeBB v4.3 + New Features

Control highlight of QTableWidget

Scheduled Pinned Locked Moved General and Desktop
8 Posts 2 Posters 4.6k 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.
  • D Offline
    D Offline
    Dcqt
    wrote on last edited by
    #1

    Hi,
    I am using the following the code to select the and print the value from a selected cell
    @

        int col = table->currentColumn();
        int row = table->currentRow();
        QTableWidgetItem *T1= table->item(row,col);
        qDebug()<<T1->text();
    

    @

    But the problem is, as soon as i press enter the highlighting is changed to next column cell and i am getting wrong values.

    for example I am pressing enter on row = 0 col = 0 , but highlight is happening on row = 0 , col =1
    hence wrong result.

    Is there any way to control the highlighting/handling this scenario to get the correct values.

    Thanks in Advance.

    1 Reply Last reply
    0
    • D Offline
      D Offline
      Dcqt
      wrote on last edited by
      #2

      May be the above question is not clear/not sufficient to understand the problem.

      the below is the code sample example for my scenario

      @
      Widget::Widget(QWidget *parent)
      : QWidget(parent)
      {
      epg = new QTableWidget(4,2,this);
      epg->horizontalHeader()->hide();
      epg->verticalHeader()->hide();
      epg->move(100,50);
      setMinimumSize(500,300);
      }

      Widget::~Widget()
      {

      }
      void Widget::keyPressEvent(QKeyEvent *event)
      {
      switch(event->key())
      {
      case Qt::Key_Up:
      qDebug()<<"Up Pressed";
      break;

          case Qt::Key_Down:
          qDebug()<<"Down Pressed";
          break;
          case Qt::Key_Enter:
          qDebug()<<"Enter Pressed";
          break;
      }
      

      }
      @

      As i am working on some target board the keys are not exactly Qt keys , some other keys are mapped to Qt keys to perform the action.
      now my problem is , when ever i send enter key the highlighting is changed to next column , because which i am getting wrong values as explained above.

      i have few doubts here:
      when ever i navigate through table why am i not getting the "Up Pressed","Down Pressed" , but getting after reaching the end cells.

      is there any way to receive the keys for table it self instead of QWidget.

      1 Reply Last reply
      0
      • D Offline
        D Offline
        Dcqt
        wrote on last edited by
        #3

        I am trying the following way to get the keys to only table:
        The keys are received in the table only , but the navigation is not happening, that means , the highlight is always the first cell i.e 0 , 0 only,

        how can i achieve the navigation and yet to receive keys for only table.

        please help.... , i need to find a solution for this...

        @
        void Widget::keyPressEvent(QKeyEvent *event)
        {
        qDebug()<<"Widget";
        switch(event->key())
        {

        case Qt::Key_Up:
        qDebug()<<"Up Pressed";
        break;
        
        case Qt::Key_Down:
        qDebug()<<"Down Pressed";
        break;
        case Qt::Key_Enter:
        case Qt::Key_Return:
        qDebug()<<"Enter Pressed";
        break;
        default:
            epg->keyPressEvent(event);
            break;
        
        }
        

        }
        //#if 0
        void epg_table::keyPressEvent(QKeyEvent *event)
        {
        qDebug()<<"EPG";

        switch(event->key())
        {
            case Qt::Key_Up:
            qDebug()<<"Up Pressed";
            break;
        
            case Qt::Key_Down:
            qDebug()<<"Down Pressed";
            break;
            case Qt::Key_Enter:
            case Qt::Key_Return:
            qDebug()<<"Enter Pressed";
            break;
        
        }
        

        }
        //#endif

        @

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

          Hi,

          If you want to get the key events without subclassing QTableWidget you can use installEventFilter.

          Hope it helps

          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
          • D Offline
            D Offline
            Dcqt
            wrote on last edited by
            #5

            My problem is the highlight is changed to next column before it is reading data.How to stop the highlight moving to next column ?

            1 Reply Last reply
            0
            • D Offline
              D Offline
              Dcqt
              wrote on last edited by
              #6

              I am trying to get atleast the signals for QTableWidgets , but which are also not working
              @
              #include "widget.h"
              #include<QDebug>
              #include<QTableWidget>
              #include<QHeaderView>
              #include<QScrollBar>
              #include<QHBoxLayout>
              #include<QPushButton>
              #include<QFont>
              #include<QLabel>
              #include<QTimer>

              #define ROW_HEIGHT 30

              Widget::Widget(QWidget *parent)
              : QWidget(parent)
              {
              table = new epg_table;
              table->setParent(this);
              table->setFixedSize(700,200);
              connect(table, SIGNAL(cellActivated( int row, int column )),this, SLOT(detectRowSelection(int row, int column)) );
              connect(table, SIGNAL(cellClicked( int row, int column )),this, SLOT(detectRowSelection(int row, int column)) );
              connect(table, SIGNAL(cellEntered( int row, int column )),this, SLOT(detectRowSelection(int row, int column)) );
              }

              epg_table::epg_table()
              {
              width = 1280;
              height = 720;

              epg_tbl_w = width - 100;
              epg_tbl_h = 8 * ROW_HEIGHT;
              chnl_col_w = epg_tbl_w - 900;
              evnt_col_w = epg_tbl_w - chnl_col_w-100;
              
              construct();
              connect(this, SIGNAL(cellActivated( int row, int column )),this, SLOT(detectRowSelection(int row, int column)) );
              

              }

              void epg_table::detectRowSelection(int row, int col)
              {
              qDebug()<<"from detectRowSelection";
              qDebug()<<"row ="<<row<<"col"<<col;
              selectionChanged()
              }

              void epg_table::construct()
              {
              int row;
              int row_max=8;

                     QFont font;
                     font.setPointSize(20);
              
                     QStringList service_name ;
                          service_name    << "200 HBO" << "201  STAR WORLD" << "202  NEO" << "203  WB" << "204  START SPORTS" << "205  LOVE";
                          service_name << "206  MGM" << "207  GEO";
              
                          setRowCount(8);
                          setColumnCount(2);
              
                          for(row = 0; row < row_max;row++){
                             setItem(row,0,new QTableWidgetItem(service_name[row]));
                             item(row,0)->setTextColor(Qt::white);
                             item(row,0)->setFont(font);
              
                          }
              
                     setItem(0,1,new QTableWidgetItem("X-Men First Class 2:00PM - 3:45PM"));
                     item(0,1)->setTextColor(Qt::white);
                     installEventFilter(this);
                      disable_headers();
                      adjust_sizes();
              
                      move(50,180);
              
                      QPalette* palette = new QPalette();
                      palette->setBrush(QPalette::Base,*(new QBrush(*(new QPixmap("./perfect.jpg")))));
                      setPalette(*palette);
                      setFrameShape(QFrame::NoFrame);
                      // setParent(this);
                       setFocus();
              

              }

              void epg_table::disable_headers()
              {

              this->verticalHeader()->setVisible(false);
              this->horizontalHeader()->setVisible(false);
              this->verticalScrollBar()->setVisible(false);
              this->horizontalScrollBar()->setVisible(false);
              

              }

              void epg_table:: adjust_sizes()
              {
              resize(epg_tbl_w,epg_tbl_h);
              setColumnWidth(0,chnl_col_w);
              setColumnWidth(1,evnt_col_w);
              setColumnWidth(2,evnt_col_w);
              }

              bool epg_table::eventFilter(QObject *obj, QEvent *event)
              {
              if (event->type() == QEvent::KeyPress) {
              QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
              qDebug("Ate key press %d", keyEvent->key());
              return false;
              } else {
              // standard event processing
              return QObject::eventFilter(obj, event);
              }
              }

              #if 0

              void Widget::keyPressEvent(QKeyEvent *event)
              {
              table->keyPressEvent(event);
              }

              void epg_table::keyPressEvent(QKeyEvent *event)
              {
              switch(event->key())
              {
              case Qt::Key_Left:
              qDebug()<<"Left Key Pressed";
              break;

                  case Qt::Key_Right:
                       qDebug()<<"Right Key Pressed";
                        break;
                  case Qt::Key_Enter:
                  case Qt::Key_Return:
                           qDebug()<<"Enter/Return Key Pressed";
                      break;
              }
              

              }
              #endif
              epg_table::~epg_table()
              {

              }
              Widget::~Widget()
              {

              }
              @

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

                What do you want to achieve with the enter key ?

                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
                • D Offline
                  D Offline
                  Dcqt
                  wrote on last edited by
                  #8

                  I am launching the video upon enter by taking the values from the cell on which i press enter, but the problem was as soon as i press enter , the highlight of cell is moving to next column and reading the values from that which i don't want.

                  I tried eventFilter example as suggested by you on some sample program below, now i don't get that problem , but i got a new problem about the indexes.

                  when i first launch the application i am getting row and col index as -1 , when i am in the second cell i.e [R1,C0] i am getting the indexes as R0, C0 and when i navigate through rows i am not getting the correct values at all

                  and also upon launch it is not selecting the cell [R0, C0]

                  can you please point me out with some small example or reference
                  on how to select the first cell upon launch , and my indices should be read correctly.
                  I am giving the complete program so that you can compile and see the probelm for your self.

                  widget.h

                  @
                  #ifndef WIDGET_H
                  #define WIDGET_H

                  #include <QtGui/QWidget>
                  #include <QTableWidget>
                  #include <QHeaderView>
                  #include <QDebug>

                  class epg_table :public QTableWidget
                  {
                  Q_OBJECT
                  public:
                  epg_table();
                  void construct();
                  private:
                  QTableWidgetItem *tItem[8];
                  protected:
                  bool eventFilter(QObject *obj, QEvent *event);

                  };

                  class Widget : public QWidget
                  {
                  Q_OBJECT

                  public:
                  Widget(QWidget *parent = 0);
                  ~Widget();

                  private:
                  epg_table *epg;
                  };

                  #endif // WIDGET_H
                  @

                  widget.cpp

                  @
                  #include "widget.h"
                  #include <QKeyEvent>
                  #include<QScrollBar>

                  Widget::Widget(QWidget *parent)
                  : QWidget(parent)
                  {
                  epg = new epg_table;
                  epg->setParent(this);
                  epg->setRowCount(8);
                  epg->setColumnCount(2);
                  epg->horizontalHeader()->hide();
                  epg->verticalHeader()->hide();
                  epg->verticalScrollBar()->hide();
                  epg->setColumnWidth(0,300);
                  epg->setColumnWidth(1,400);
                  epg->resize(700,500);
                  epg->move(100,50);
                  epg->construct();

                  }

                  epg_table::epg_table()
                  {
                  for(int row = 0; row < 8;row++){
                  tItem[row] = NULL;
                  }
                  }

                  void epg_table::construct()
                  {
                  int row;
                  int row_max=8;

                         QFont font;
                         font.setPointSize(20);
                          static int start = 0;
                         QStringList service_name ;
                              service_name    << "200 HBO" << "201  STAR WORLD" << "202  NEO" << "203  WB" << "204  START SPORTS" << "205  LOVE";
                              service_name << "206  MGM" << "207  GEO"<<"300 STAR Movies" << "201  STAR Cricket" << "202  Sony" << "203  Kushi" << "204  STARTUtsav" << "205  LOVE";
                              service_name << "203  PIX" << "204  SETMax";
                  
                              setRowCount(8);
                              setColumnCount(2);
                  
                  
                              for(row = 0; row < row_max;row++){
                  
                                  if(!tItem[row]) {
                                      qDebug()<<"Allocating "<<row+1;
                                      tItem[row] = new QTableWidgetItem();
                                      setItem(row,0,tItem[row]);
                                      item(row,0)->setTextColor(Qt::red);
                                      item(row,0)->setFont(font);
                                  }
                              }
                  
                              for(row = 0; row < 8;row++){
                                  tItem[row]->setText(service_name[start]);
                                  qDebug()<<"Adding "<<start+1;
                                    QTableWidgetItem(service_name[row]));
                                   start++;
                                  start= (start==16?0:start);
                              }
                  
                         setItem(0,1,new QTableWidgetItem("X-Men First Class 2:00PM - 3:45PM"));
                         item(0,1)->setTextColor(Qt::red);
                         installEventFilter(this);
                          QPalette* palette = new QPalette();
                          palette->setBrush(QPalette::Base,*(new QBrush(*(new QPixmap("bangles.jpg")))));
                          setPalette(*palette);
                          setFrameShape(QFrame::NoFrame);
                  
                           setFocus();
                          int ccol = currentColumn();
                          int crow = currentRow();
                           qDebug()<<"Crow = "<<crow<<"Ccol="&lt;&lt;ccol;
                  

                  }

                  Widget::~Widget()
                  {

                  }

                  bool epg_table::eventFilter(QObject *obj, QEvent *event)
                  {

                  if (event-&gt;type() == QEvent::KeyPress) {
                             QKeyEvent *keyEvent = static_cast&lt;QKeyEvent *&gt;(event);
                             qDebug("key press %d", keyEvent->key());
                             switch(keyEvent->key()){
                  
                                 case Qt::Key_Up: {
                                     qDebug("UP");
                                     int col = currentColumn();
                                     int row = currentRow();
                                     qDebug()<<"row = "<<row<<"col="&lt;&lt;col;
                                     if(row == 0)
                                         construct();
                  
                                  }
                                     break;
                  
                                 case Qt::Key_Down:
                                      qDebug("Down");{
                                      int col = currentColumn();
                                      int row = currentRow();
                                      qDebug()<<"row = "<<row<<"col="&lt;&lt;col;
                                     if(row == 7)
                                         construct();
                             }
                                     break;
                  
                              case Qt::Key_Enter:
                                  qDebug()&lt;&lt;"Enter Key";
                                  break;
                  
                                 default:
                                     break;
                             }
                      return false;
                  }
                  

                  }

                  @

                  main.cpp

                  @
                  #include <QtGui/QApplication>
                  #include "widget.h"

                  int main(int argc, char *argv[])
                  {
                  QApplication a(argc, argv);
                  Widget w;
                  w.show();

                  return a.exec(&#41;;
                  

                  }

                  @

                  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