Inconvenient Behaviour: QSqlTableModel.removeRow()



  • Hi All,,

    After updating PyQt version 4.8.5 to 4.9.4, QSqlTableModel.removeRow() has the following behavior:

    • Return True.
    • verticalHeaderData changed to "!".
    • Row content erased (Record fields become blank in the QTableView)
    • Calling submitAll() works as expected.

    More Info:

    • I tried to install a fresh copy of Python v2.7 & PyQt v4.9.4 to another machine but the problem persist.
    • Downgrading the PyQt version to 4.8.5 seems to solve the problem.

    Code: (This is the exact code used for testing on both versions)
    @
    mw = QMainWindow()

    model = QSqlTableModel(None, connectionManager().getConnection())
    model.setTable("vouchertypes")
    model.setEditStrategy(model.OnManualSubmit)
    model.select()
    
    tv = QTableView(mw)
    tv.setModel(model)
    
    bt = QPushButton("Delete", mw)
    bt.clicked.connect(lambda: model.removeRow(tv.currentIndex().row()))
    mw.show()
    

    @

    • If some can help providing me a previous PyQt ver(4.9.1 or 4.9.2 or 4.9.3) this might solve the problem for the current time.

    Appreciate any kind of help.



  • You are not describing the actual change in behavior, nor what you percieve to be the problem.



  • sorry Andre, i will try to explain better now.

    the problem is: Why calling QSqlTableModel.removeRow() erase the row content in the view and model. (so, calling record.field().value().toString() for the removed row --without calling submitAll()-- returns empty string for all fields.!!)

    doing so with PyQt v4.8.5 will keep the row contents untouched until i call submitAll() for actual deletion.

    Thanks for your patience.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.