Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Problem with selecting next/previowus record
Forum Updated to NodeBB v4.3 + New Features

Problem with selecting next/previowus record

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
16 Posts 3 Posters 814 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.
  • Karoluss96K Offline
    Karoluss96K Offline
    Karoluss96
    wrote on last edited by
    #7

    Please don't publish it in any media!

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

      That is why I was requesting a minimal runnable script to that would show your issue.

      From the looks of it, you can use QTableView's currentIndex to grab the currently selected index.

      From a code point of view, you should refactor your NextOne function. It's hard to read and reason about because you are not using meaningful variable names. Also, NextOne does not follow python best practices for function naming.

      Here a simplified and clearer version:

      def select_next_row(self):
          selection_model = self.dlg.tableView_3.selectionModel()
          current_index = selection_model.currentIndex()
          if current_index.isValid():
                next_index = current_index.siblingAtRow(current_index.row() + 1)
                if next_index.isValid():
                    selection_model.select(next_index, QItemSelectionModel.ClearAndSelect | QItemSelectionModel.Rows)
      

      Unless you want to implement wrapping from the bottom to the top of your table view, there's nothing more that method should do.

      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
      • Karoluss96K Offline
        Karoluss96K Offline
        Karoluss96
        wrote on last edited by
        #9

        Thnaks, but still change only to first next.
        What kind of code (for which funtion) you want to see to find better solution for my problem?

        jsulmJ 1 Reply Last reply
        0
        • Karoluss96K Karoluss96

          Thnaks, but still change only to first next.
          What kind of code (for which funtion) you want to see to find better solution for my problem?

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

          @Karoluss96 said in Problem with selecting next/previowus record:

          What kind of code

          A runnable script as small as possible which shows this behaviour.

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

          1 Reply Last reply
          0
          • Karoluss96K Offline
            Karoluss96K Offline
            Karoluss96
            wrote on last edited by
            #11

            Function for showing records in tableView looks that:

             def present_data(self):
                        query = QSqlQuery(db)
                        query.exec_(Zap)
                        global ier
                        ier= ['ID','TERYT'] #and more atributtes
                        self.model4.clear()
                        self.model4.setHorizontalHeaderLabels(ier)
                        x = 0
                        while query.next():
                            x += 1
                            self.model4.setItem(x, 0, QStandardItem(str(int(query.record().value(ier[0])))))#ID
                            self.model4.setItem(x, 1, QStandardItem(str(query.record().value(ier[1]))))#code of ad level 1
            #next atributtes in table 'ier'
             self.dlg.tableView_3.clicked.connect(self.SelekcjaRzedu)
            

            and next:

            def selectRow(self):
                            dane=self.dlg.tableView_3.selectionModel().currentIndex()
                            rzad=dane.row()
                            self.dlg.label_53.setText(str(self.dlg.comboBox_9.currentText()))#administrative level 2 
                            woj= ((self.dlg.comboBox_3.currentText())[0:-5]).lower()#administrative level 1 
                            a1=dane.siblingAtRow(rzad).siblingAtColumn(0).data()#ID
                            b2=dane.siblingAtRow(rzad).siblingAtColumn(1).data()#code of ad level 1
            #next attributes...
            if woj !='do':#not put NULL in labels
                                self.dlg.label_82.setText(woj)
                            else:
                                self.dlg.label_82.setText('')
                            if a1 != 'NULL':
                                self.dlg.label_32.setText(str(a1))
                            else:
                                self.dlg.label_32.setText('')
            
            jsulmJ 1 Reply Last reply
            0
            • Karoluss96K Karoluss96

              Function for showing records in tableView looks that:

               def present_data(self):
                          query = QSqlQuery(db)
                          query.exec_(Zap)
                          global ier
                          ier= ['ID','TERYT'] #and more atributtes
                          self.model4.clear()
                          self.model4.setHorizontalHeaderLabels(ier)
                          x = 0
                          while query.next():
                              x += 1
                              self.model4.setItem(x, 0, QStandardItem(str(int(query.record().value(ier[0])))))#ID
                              self.model4.setItem(x, 1, QStandardItem(str(query.record().value(ier[1]))))#code of ad level 1
              #next atributtes in table 'ier'
               self.dlg.tableView_3.clicked.connect(self.SelekcjaRzedu)
              

              and next:

              def selectRow(self):
                              dane=self.dlg.tableView_3.selectionModel().currentIndex()
                              rzad=dane.row()
                              self.dlg.label_53.setText(str(self.dlg.comboBox_9.currentText()))#administrative level 2 
                              woj= ((self.dlg.comboBox_3.currentText())[0:-5]).lower()#administrative level 1 
                              a1=dane.siblingAtRow(rzad).siblingAtColumn(0).data()#ID
                              b2=dane.siblingAtRow(rzad).siblingAtColumn(1).data()#code of ad level 1
              #next attributes...
              if woj !='do':#not put NULL in labels
                                  self.dlg.label_82.setText(woj)
                              else:
                                  self.dlg.label_82.setText('')
                              if a1 != 'NULL':
                                  self.dlg.label_32.setText(str(a1))
                              else:
                                  self.dlg.label_32.setText('')
              
              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #12

              @Karoluss96 This is not a RUNNABLE script...

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

              1 Reply Last reply
              0
              • Karoluss96K Offline
                Karoluss96K Offline
                Karoluss96
                wrote on last edited by
                #13

                you want the run function?

                1 Reply Last reply
                0
                • Karoluss96K Offline
                  Karoluss96K Offline
                  Karoluss96
                  wrote on last edited by
                  #14

                  the run function to open this gui looks that:

                  def run(self):
                  global TERYT, qmlPath, mainPath, controlPath, db, connectionParam, schema, password, database, port, host, oznaczenieZmiany

                      # paths to files
                      qmlPath = Path(QgsApplication.qgisSettingsDirPath())/Path("python/plugins/SystemBDOT10k/BDOT10k_QML/")
                      mainPath = Path(QgsApplication.qgisSettingsDirPath())/Path("python/plugins/SystemBDOT10k/")
                      controlPath = Path(QgsApplication.qgisSettingsDirPath())/Path("python/plugins/SystemBDOT10k/Kontrole/")
                      
                      self.dlg = SystemBDOT10k_dialog()
                      self.dlg.setWindowFlag(Qt.WindowMinimizeButtonHint, True)
                      self.dlg.rejected.connect(self.close)
                      
                      #get parameters from file SystemBDOT10k.ini 
                      config = configparser.ConfigParser()
                      config.read(str(mainPath)+'/SystemBDOT10k.ini')
                      connectionParam = config['oracle']
                      schema = (base64.b64decode((connectionParam['Schema']).encode('utf-8'))).decode('utf-8')
                      password = (base64.b64decode((connectionParam['Password']).encode('utf-8'))).decode('utf-8')
                      port = connectionParam['Port']
                      host = connectionParam['Host']
                      database = connectionParam['Database']
                      markChange = config['MainSettings']['markChange']
                  
                      # connect to data base
                      db = QSqlDatabase.addDatabase("QOCISPATIAL")
                      db.setDatabaseName(host + ':' + port + '/' + database)
                      db.setUserName(schema)
                      db.setPassword(password)
                      ok = db.open()
                      self.operetionOnData()
                      
                      
                      self.dlg.comboBox.currentTextChanged.connect(self.chooseStatus)
                      
                      self.statusPowiatu()
                      self.chooseStatus()
                      
                      # selecting QML folders to comboBox
                      path = os.listdir(str(qmlPath).replace("\\","/"))
                      length = len(path)
                      for i in range(length):
                          self.dlg.comboBox_1.addItem(path[i])
                          
                      self.dlg.show() 
                      result = self.dlg.exec_() # Run the dialog event loop
                  
                  jsulmJ 1 Reply Last reply
                  0
                  • Karoluss96K Karoluss96

                    the run function to open this gui looks that:

                    def run(self):
                    global TERYT, qmlPath, mainPath, controlPath, db, connectionParam, schema, password, database, port, host, oznaczenieZmiany

                        # paths to files
                        qmlPath = Path(QgsApplication.qgisSettingsDirPath())/Path("python/plugins/SystemBDOT10k/BDOT10k_QML/")
                        mainPath = Path(QgsApplication.qgisSettingsDirPath())/Path("python/plugins/SystemBDOT10k/")
                        controlPath = Path(QgsApplication.qgisSettingsDirPath())/Path("python/plugins/SystemBDOT10k/Kontrole/")
                        
                        self.dlg = SystemBDOT10k_dialog()
                        self.dlg.setWindowFlag(Qt.WindowMinimizeButtonHint, True)
                        self.dlg.rejected.connect(self.close)
                        
                        #get parameters from file SystemBDOT10k.ini 
                        config = configparser.ConfigParser()
                        config.read(str(mainPath)+'/SystemBDOT10k.ini')
                        connectionParam = config['oracle']
                        schema = (base64.b64decode((connectionParam['Schema']).encode('utf-8'))).decode('utf-8')
                        password = (base64.b64decode((connectionParam['Password']).encode('utf-8'))).decode('utf-8')
                        port = connectionParam['Port']
                        host = connectionParam['Host']
                        database = connectionParam['Database']
                        markChange = config['MainSettings']['markChange']
                    
                        # connect to data base
                        db = QSqlDatabase.addDatabase("QOCISPATIAL")
                        db.setDatabaseName(host + ':' + port + '/' + database)
                        db.setUserName(schema)
                        db.setPassword(password)
                        ok = db.open()
                        self.operetionOnData()
                        
                        
                        self.dlg.comboBox.currentTextChanged.connect(self.chooseStatus)
                        
                        self.statusPowiatu()
                        self.chooseStatus()
                        
                        # selecting QML folders to comboBox
                        path = os.listdir(str(qmlPath).replace("\\","/"))
                        length = len(path)
                        for i in range(length):
                            self.dlg.comboBox_1.addItem(path[i])
                            
                        self.dlg.show() 
                        result = self.dlg.exec_() # Run the dialog event loop
                    
                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #15

                    @Karoluss96 Runnable means in this case: something somebody can download/copy from here and drectly execute to reproduce your issue.

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

                    1 Reply Last reply
                    0
                    • Karoluss96K Offline
                      Karoluss96K Offline
                      Karoluss96
                      wrote on last edited by
                      #16

                      This is a QGIS plugin with GUI, so it isn't possible to put it outside of QGIS program (which you can download for free here: https://qgis.org/pl/site/forusers/download.html)

                      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