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. Key press event to choose list
Forum Updated to NodeBB v4.3 + New Features

Key press event to choose list

Scheduled Pinned Locked Moved Solved General and Desktop
qtcreatorqt5.5qt 5.7qkeypressevent
14 Posts 3 Posters 4.1k Views 2 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.
  • K Offline
    K Offline
    Kinesis
    wrote on last edited by
    #1

    Hi , I would like to add up and down key press event functions in my code . There are directory lists in a widget , when I click a directory the items (inside this selected directory) will be displayed. In that case I want to add up and down key press action , if I press down key from keyboard , the below directory will be selected and display every items and same function for up key.How can I add key press event?

    jsulmJ 1 Reply Last reply
    0
    • K Kinesis

      Hi , I would like to add up and down key press event functions in my code . There are directory lists in a widget , when I click a directory the items (inside this selected directory) will be displayed. In that case I want to add up and down key press action , if I press down key from keyboard , the below directory will be selected and display every items and same function for up key.How can I add key press event?

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @Kinesis What widget is this? QListWidget?

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      K 1 Reply Last reply
      0
      • jsulmJ jsulm

        @Kinesis What widget is this? QListWidget?

        K Offline
        K Offline
        Kinesis
        wrote on last edited by
        #3

        @jsulm
        Yes widget is QListWidget.Here is the current code.

         connect(listWidget_dirList, & QListWidget::itemClicked,[directory,listWidget_main,this](QListWidgetItem *item)
                {
                    listWidget_main->show();
                    listWidget_main->clear();
                    // QDir directory(item->text());
                    QDir dir = directory.absolutePath() + '/' + item->text();
        
        dir.setNameFilters({"*.png", "*.jpg"});
        
                    for(const QFileInfo & finfo: dir.entryInfoList()){
        
                        QPixmap image(finfo.absoluteFilePath());
                        auto imageLabel = new QLabel();
                        imageLabel->setMinimumSize(320,320);
                        imageLabel->setScaledContents(true);
                        imageLabel->setPixmap(image);
        
        
        
                        auto    item = new QListWidgetItem("",listWidget_main);
                        auto    widget = new QWidget;
                        auto    label = new QLabel(finfo.fileName());
                        auto    vb = new QVBoxLayout;
        
                        vb->addWidget(label);
                        vb->addWidget(imageLabel);
        
                        widget->setLayout(vb);
                        widget->setMinimumSize(340,340);
                        listWidget_main->setItemWidget(item,widget);
        }
        
        jsulmJ 1 Reply Last reply
        0
        • K Kinesis

          @jsulm
          Yes widget is QListWidget.Here is the current code.

           connect(listWidget_dirList, & QListWidget::itemClicked,[directory,listWidget_main,this](QListWidgetItem *item)
                  {
                      listWidget_main->show();
                      listWidget_main->clear();
                      // QDir directory(item->text());
                      QDir dir = directory.absolutePath() + '/' + item->text();
          
          dir.setNameFilters({"*.png", "*.jpg"});
          
                      for(const QFileInfo & finfo: dir.entryInfoList()){
          
                          QPixmap image(finfo.absoluteFilePath());
                          auto imageLabel = new QLabel();
                          imageLabel->setMinimumSize(320,320);
                          imageLabel->setScaledContents(true);
                          imageLabel->setPixmap(image);
          
          
          
                          auto    item = new QListWidgetItem("",listWidget_main);
                          auto    widget = new QWidget;
                          auto    label = new QLabel(finfo.fileName());
                          auto    vb = new QVBoxLayout;
          
                          vb->addWidget(label);
                          vb->addWidget(imageLabel);
          
                          widget->setLayout(vb);
                          widget->setMinimumSize(340,340);
                          listWidget_main->setItemWidget(item,widget);
          }
          
          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #4

          @Kinesis Can't you just use http://doc.qt.io/qt-5/qlistwidget.html#currentRowChanged ?

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          K 1 Reply Last reply
          2
          • jsulmJ jsulm

            @Kinesis Can't you just use http://doc.qt.io/qt-5/qlistwidget.html#currentRowChanged ?

            K Offline
            K Offline
            Kinesis
            wrote on last edited by
            #5

            @jsulm
            Well , as you said I tried to use currentRow Changed , but I need to take the text from current row , to get directory path. How can I get the text from current row.There may be some mistakes in my code.Take a look please.

            connect(listWidget_dirList, & QListWidget::currentRowChanged,[directory,listWidget_main,this](int currentRow)
                    {
                        listWidget_main->show();
                        listWidget_main->clear();
                        // QDir directory(item->text());
                        QDir dir = directory.absolutePath() + '/' + currentRow->text();
                        dir.setNameFilters({"*.png", "*.jpg"});
            
                        for(const QFileInfo & finfo: dir.entryInfoList()){
                  ----------------
                  ----------------
                  ----------------
            }
            });
            
            jsulmJ SGaistS 2 Replies Last reply
            0
            • K Kinesis

              @jsulm
              Well , as you said I tried to use currentRow Changed , but I need to take the text from current row , to get directory path. How can I get the text from current row.There may be some mistakes in my code.Take a look please.

              connect(listWidget_dirList, & QListWidget::currentRowChanged,[directory,listWidget_main,this](int currentRow)
                      {
                          listWidget_main->show();
                          listWidget_main->clear();
                          // QDir directory(item->text());
                          QDir dir = directory.absolutePath() + '/' + currentRow->text();
                          dir.setNameFilters({"*.png", "*.jpg"});
              
                          for(const QFileInfo & finfo: dir.entryInfoList()){
                    ----------------
                    ----------------
                    ----------------
              }
              });
              
              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by jsulm
              #6

              @Kinesis As you can see currentRow is an integer - you can't call any methods on it, right?
              If you check the documentation you will find this: http://doc.qt.io/qt-5/qlistwidget.html#item

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              K 1 Reply Last reply
              1
              • jsulmJ jsulm

                @Kinesis As you can see currentRow is an integer - you can't call any methods on it, right?
                If you check the documentation you will find this: http://doc.qt.io/qt-5/qlistwidget.html#item

                K Offline
                K Offline
                Kinesis
                wrote on last edited by Kinesis
                #7

                @jsulm
                So how can I get the text from selected directroy ? Is there another method to get the text ? I think I can use "QListWidget::itemSelectionChanged()". But if I use that how can I get the text(directory path)?

                jsulmJ 1 Reply Last reply
                0
                • K Kinesis

                  @jsulm
                  So how can I get the text from selected directroy ? Is there another method to get the text ? I think I can use "QListWidget::itemSelectionChanged()". But if I use that how can I get the text(directory path)?

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  @Kinesis I already suggested what to do to get the text. Did you read it? Again: you can get the current item using currentRow and http://doc.qt.io/qt-5/qlistwidget.html#item, then you simply call http://doc.qt.io/qt-5/qlistwidgetitem.html#text on the item to get the text.

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  K 1 Reply Last reply
                  1
                  • jsulmJ jsulm

                    @Kinesis I already suggested what to do to get the text. Did you read it? Again: you can get the current item using currentRow and http://doc.qt.io/qt-5/qlistwidget.html#item, then you simply call http://doc.qt.io/qt-5/qlistwidgetitem.html#text on the item to get the text.

                    K Offline
                    K Offline
                    Kinesis
                    wrote on last edited by
                    #9

                    @jsulm
                    I tried to get the current row with "QListWidgetItem *item(int row)" and call"item->text()" on the item to get the text . It still doesn't work.But I dont't know where I made mistake.

                    jsulmJ 1 Reply Last reply
                    0
                    • K Kinesis

                      @jsulm
                      Well , as you said I tried to use currentRow Changed , but I need to take the text from current row , to get directory path. How can I get the text from current row.There may be some mistakes in my code.Take a look please.

                      connect(listWidget_dirList, & QListWidget::currentRowChanged,[directory,listWidget_main,this](int currentRow)
                              {
                                  listWidget_main->show();
                                  listWidget_main->clear();
                                  // QDir directory(item->text());
                                  QDir dir = directory.absolutePath() + '/' + currentRow->text();
                                  dir.setNameFilters({"*.png", "*.jpg"});
                      
                                  for(const QFileInfo & finfo: dir.entryInfoList()){
                            ----------------
                            ----------------
                            ----------------
                      }
                      });
                      
                      SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      Hi,

                      @Kinesis said in Key press event to choose list:

                      listWidget_main->show();
                      listWidget_main->clear();

                      Aren't you emptying the content of your listWidget before getting the value you are interested in ?

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

                      K 1 Reply Last reply
                      0
                      • SGaistS SGaist

                        Hi,

                        @Kinesis said in Key press event to choose list:

                        listWidget_main->show();
                        listWidget_main->clear();

                        Aren't you emptying the content of your listWidget before getting the value you are interested in ?

                        K Offline
                        K Offline
                        Kinesis
                        wrote on last edited by
                        #11

                        @SGaist
                        Yes , I first clear the widget and show items from other dirs. If I don't clear the widget , that's still fine. I just want to test it clearly.

                        1 Reply Last reply
                        0
                        • K Kinesis

                          @jsulm
                          I tried to get the current row with "QListWidgetItem *item(int row)" and call"item->text()" on the item to get the text . It still doesn't work.But I dont't know where I made mistake.

                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by jsulm
                          #12

                          @Kinesis said in Key press event to choose list:

                          QListWidgetItem *item(int row)

                          connect(listWidget_dirList, & QListWidget::currentRowChanged,[directory,listWidget_main,this](int currentRow)
                          {
                              listWidget_main->show();
                              listWidget_main->clear();
                          
                              QListWidgetItem *item = listWidget_dirList->item(currentRow);
                              if (item)  {
                                  QString text = item->text();
                                  ...
                              }
                          

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          K 1 Reply Last reply
                          1
                          • jsulmJ jsulm

                            @Kinesis said in Key press event to choose list:

                            QListWidgetItem *item(int row)

                            connect(listWidget_dirList, & QListWidget::currentRowChanged,[directory,listWidget_main,this](int currentRow)
                            {
                                listWidget_main->show();
                                listWidget_main->clear();
                            
                                QListWidgetItem *item = listWidget_dirList->item(currentRow);
                                if (item)  {
                                    QString text = item->text();
                                    ...
                                }
                            
                            K Offline
                            K Offline
                            Kinesis
                            wrote on last edited by
                            #13

                            @jsulm
                            I am really sorry . I misunderstood your explanation . Now it works . Thanks

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

                              My bad, I misread from where the signal came from.

                              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

                              • Login

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