<div dir="ltr"><div>Awesome, thanks, that's exactly what I needed to know.</div><div><br></div><div>Rodrigo<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Feb 7, 2021 at 8:31 PM Maurizio Berti <<a href="mailto:maurizio.berti@gmail.com">maurizio.berti@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr">Il giorno sab 6 feb 2021 alle ore 10:46 Rodrigo de Salvo Braz <<a href="mailto:rodrigobraz@gmail.com" target="_blank">rodrigobraz@gmail.com</a>> ha scritto:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi,</div><div><br></div><div><a href="https://doc.qt.io/qtforpython-5.12/overviews/sql-presenting.html" target="_blank">Qt's documentation says</a> one can use setHeaderData to set column headers.</div><div><br></div><div>However, I used it in the simple example below and it has no effect. Why not?</div><div></div></div></blockquote></div><div><br></div><div>If you simply try to print the result of your `setHeaderData()` calls, you'll see that the returned value is always False.</div><div><br></div><div>By default abstract item models do not implement anything on their basic methods, especially when trying to set data and properties on the model itself. Those methods are implemented in models that are *not* abstract and allow data writing (such as QStandardModelItem or, in your case, QSqlQueryModel and all its inherited classes which are reported in your link). The same would happen, in fact, for setData(), which makes sense: being an abstract model, it's up to you to actually set the data and return whether if the setting actually occurred or not.</div><div><br></div><div>Methods like setHeaderData() will always return False (meaning that the data has not been set) unless they're actually implemented in order to return True.</div><div><br></div><div><div><font face="monospace">class TableModel(QtCore.QAbstractTableModel):</font></div><div><font face="monospace">    def __init__(self):</font></div><div><font face="monospace">        super().__init__()</font></div><div><font face="monospace">        self.headers = []</font></div><div><font face="monospace">        for i in range(4):</font></div><div><font face="monospace">            self.setHeaderData(i, Qt.Horizontal, "Column " + str(i))</font></div><div><font face="monospace"><br></font></div><div></div></div><div><font face="monospace">    def setHeaderData(self, section, orientation, value, role=QtCore.Qt.EditRole):</font></div><div><font face="monospace">        if (orientation == QtCore.Qt.Horizontal and </font></div><div><font face="monospace">            0 <= section < self.columnCount() and role == QtCore.Qt.EditRole):</font></div><div><font face="monospace">                while len(self.headers) < section + 1:</font></div><div><font face="monospace">                    self.headers.append(None)</font></div><div><font face="monospace">                self.headers[section] = value</font></div><div><font face="monospace">                self.headerDataChanged.emit(orientation, section, section)</font></div><div><font face="monospace">                return True</font></div><div><font face="monospace">        return False</font></div><div><br></div>-- <br><div dir="ltr">È difficile avere una convinzione precisa quando si parla delle ragioni del cuore. - "Sostiene Pereira", Antonio Tabucchi<br><a href="http://www.jidesk.net" target="_blank">http://www.jidesk.net</a></div></div></div>
</blockquote></div>