Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. [solved]QAbstractListModel - update data in table view [linux]
Forum Updated to NodeBB v4.3 + New Features

[solved]QAbstractListModel - update data in table view [linux]

Scheduled Pinned Locked Moved Mobile and Embedded
29 Posts 3 Posters 13.1k 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.
  • T Offline
    T Offline
    topse
    wrote on last edited by
    #4

    Have you made yourself acquaint with Signals and Slots?

    When is your "resetItems" being called? I am not familiar with the Python Implementation of Qt -- maybe you should use "setModel"?

    1 Reply Last reply
    0
    • S Offline
      S Offline
      s_z_p
      wrote on last edited by
      #5

      I am just a beginner in Qt.
      Perhaps instead of "model" I shoud reset "stockdata" (add to the line 6):

      @
      def resetItems(self,stockdata):
      self.beginResetModel()
      self.__stockdata = stockdata
      self.endResetModel()
      @

      I took the example from this website:
      http://www.nullege.com/codes/show/src@o@m@omg-0.3.1@omg@models@simplelistmodel.py/42/PyQt4.QtCore.QAbstractListModel.beginResetModel/python

      1 Reply Last reply
      0
      • S Offline
        S Offline
        s_z_p
        wrote on last edited by
        #6

        There is something like " self.dataChanged.emit(index, index, ())" but I haven't found how to use reset and signal together to refresh my view yet.

        1 Reply Last reply
        0
        • S Offline
          S Offline
          s_z_p
          wrote on last edited by
          #7

          somebody? any idea how?
          Is it possible to refresh QAbstractListModel getting data from file at all?

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

            Hi,

            You could use a QFileSystemWatcher so you get the information that the file has been modified and re-read it.

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

              I use QFileSystemWatcher like that:
              @
              file_check = QtCore.QFileSystemWatcher(['/home/user/file.txt'])
              file_check.fileChanged.connect(resetItems)@

              "resetItems" looks like that:

              @def resetItems(self,stockdata):
              self.beginResetModel()
              self.stockdata = stockdata
              self.endResetModel()@

              it looks fine but when I run script I got the error:

              TypeError: resetItems() takes exactly 2 arguments (1 given)

              Could it be mistake in QFileSystemWatcher syntax?

              thx for reply!

              1 Reply Last reply
              0
              • S Offline
                S Offline
                s_z_p
                wrote on last edited by
                #10

                Or problem is related how I reset model:

                @ def resetItems(self):
                self.beginResetModel()
                self.__stockdata = stockdata
                self.endResetModel()@

                Error:
                AttributeError: 'QString' object has no attribute 'beginResetModel'

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

                  It looks like you are mixing several things here. Why did you change your class base type ?

                  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
                  • S Offline
                    S Offline
                    s_z_p
                    wrote on last edited by
                    #12

                    @SGaist what do you mean by changing my class base type?, are you talking about 'stockdata' vs '__stockdata' ?
                    What I understand, my app is running, 'QWatcher' checks if the source file hasn't been changed if yes it runs 'resetItems'.

                    1 Reply Last reply
                    0
                    • S Offline
                      S Offline
                      s_z_p
                      wrote on last edited by
                      #13

                      I checked and QWatcher works fine. Problem is related to function resetItems but I haven't found solution.. any idea?

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

                        @AttributeError: ‘QString’ object has no attribute ‘beginResetModel’@

                        means that you are trying to call beginResetModel on a QString class, which is wrong.

                        stockdata and __stockdata don't seem to represent the same thing, you should use more meaningful names for your variables to make your code easier to understand

                        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
                        • S Offline
                          S Offline
                          s_z_p
                          wrote on last edited by
                          #15

                          how then resetItems has to look like? in this particular case. thx

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

                            It should be part of your subclass of QAbstractItemModel

                            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
                            • S Offline
                              S Offline
                              s_z_p
                              wrote on last edited by
                              #17

                              what you have written means that this is wrong ?

                              @class StockListModel(QtCore.QAbstractListModel):
                              def init(self, stockdata = [], parent = None):
                              QtCore.QAbstractListModel.init(self, parent)
                              self.stockdata = stockdata

                                  def getItems(self):
                                     return stockdata
                              

                              #resetItems:
                              def resetItems(self,stockdata):
                              self.beginResetModel()
                              self.stockdata = stockdata
                              self.endResetModel()

                                  def rowCount(self, parent):
                                      return len(self.stockdata)
                                      
                                  def data(self, index, role):        
                                      if role == QtCore.Qt.DisplayRole:
                                          row = index.row()
                                          value = self.stockdata[row]
                                          return value
                                          
                                  file_check = QtCore.QFileSystemWatcher(['/home/user/Desktop/plik.txt'])
                                  file_check.fileChanged.connect(resetItems)
                              

                              if name == 'main':
                              app = QtGui.QApplication(sys.argv)
                              app.setStyle("plastique")

                                  tableView = QtGui.QTableView()      
                                  tableView.show()
                               
                                  a = os.popen("cat /home/user/Desktop/plik.txt")
                                  a = a.read()
                                  time_variable = QtCore.QString("%s"%a)
                               
                                  model = StockListModel([time_variable])
                               
                                  tableView.setModel(model)
                                  sys.exit(app.exec_())@
                              

                              and instead of QtCore.QAbstractListModel i should use QtCore.QAbstractItemModel ? or add aditional subclass?

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

                                Shouldn't stockdata be a list ? If so, your connection doesn't make sense

                                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
                                • S Offline
                                  S Offline
                                  s_z_p
                                  wrote on last edited by
                                  #19

                                  Yes it is a list but I didn't paste the whole code. There is only one cell in this code. What do you mean "connection doesn't make sense", which part?

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

                                    fileChanged gives you the path of the file that changed, not it's content, so basically you are replacing your list by a string.

                                    Also, why are you using the model/view approach if you only have one entry ?

                                    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
                                    • S Offline
                                      S Offline
                                      s_z_p
                                      wrote on last edited by
                                      #21

                                      Model view approach is needed for let's say full version of the script.

                                      I think I get your point about string. Let me check that.

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

                                        The signal will just tell you that the file has changed, it will not reload the content for you. You'll have to parse the file again and update stockdata with what you just read from it

                                        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
                                        • S Offline
                                          S Offline
                                          s_z_p
                                          wrote on last edited by
                                          #23

                                          One more thing.
                                          file_check = QtCore.QFileSystemWatcher(['/home/user/Desktop/plik.txt'])
                                          file_check only checks if file was changed if was:

                                          file_check.fileChanged.connect(resetItems)
                                          it sends signal to 'resetItems' and 'resetItems' should reload data, true?
                                          and I have to find a way how accept the string parameter emitted by fileChanged..

                                          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