How to change orientation of Qt TableView

前端 未结 2 1826
暖寄归人
暖寄归人 2021-01-19 18:40

Hi I am using a QTableView to display data from a sql table using the qsqltablemodel asfollows:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(par         


        
相关标签:
2条回答
  • 2021-01-19 18:53
    class Horizontal_proxy_model : public QAbstractProxyModel {
    public:
      Horizontal_proxy_model(QObject * parent = 0);
      QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
      QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
      QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
      QModelIndex parent(const QModelIndex &child) const;
      int rowCount(const QModelIndex &parent) const;
      int columnCount(const QModelIndex &parent) const;
      QVariant headerData(int section, Qt::Orientation orientation, int role) const;
    };
    
    Horizontal_proxy_model::Horizontal_proxy_model(QObject *parent) : 
      QAbstractProxyModel(parent) {
    }
    
    QModelIndex Horizontal_proxy_model::mapToSource(const QModelIndex &proxyIndex) const {
      if (sourceModel()) {
        return sourceModel()->index(proxyIndex.column(), proxyIndex.row());
      } else {
        return QModelIndex();
      }
    }
    
    QModelIndex Horizontal_proxy_model::mapFromSource(const QModelIndex &sourceIndex) const {
      return index(sourceIndex.column(), sourceIndex.row());
    }
    
    QModelIndex Horizontal_proxy_model::index(int row, int column, const QModelIndex &) const {
      return createIndex(row, column, (void*) 0);
    }
    
    QModelIndex Horizontal_proxy_model::parent(const QModelIndex &) const {
      return QModelIndex();
    }
    
    int Horizontal_proxy_model::rowCount(const QModelIndex &) const {
      return sourceModel() ? sourceModel()->columnCount() : 0;
    }
    
    int Horizontal_proxy_model::columnCount(const QModelIndex &) const {
      return sourceModel() ? sourceModel()->rowCount() : 0;
    }
    
    QVariant Horizontal_proxy_model::headerData(
               int section, Qt::Orientation orientation, int role) const {
      if (!sourceModel()) { return QVariant(); }
      Qt::Orientation new_orientation = orientation == Qt::Horizontal ? 
          Qt::Vertical : Qt::Horizontal;
      return sourceModel()->headerData(section, new_orientation, role);
    }
    

    Usage:

    Horizontal_proxy_model* proxy_model = new Horizontal_proxy_model();
    proxy_model->setSourceModel(model);
    ui->tableView->setModel(proxy_model);
    
    0 讨论(0)
  • 2021-01-19 19:08

    Updated for PyQt5

    from PyQt5.QtCore import Qt, QAbstractProxyModel, QModelIndex, QSortFilterProxyModel
    
    class HorizontalProxyModel(QAbstractProxyModel):
        """Rotates model 90 degrees"""
    
        def __init__(self, src, parent=None):
            super(HorizontalProxyModel, self).__init__(parent)
            self.setSourceModel(src)
    
        def mapToSource(self, proxyIndex: QModelIndex) -> QModelIndex:
            if self.sourceModel():
                return self.sourceModel().index(proxyIndex.column(), proxyIndex.row())
            else:
                return QModelIndex()
    
        def mapFromSource(self, sourceIndex: QModelIndex) -> QModelIndex:
            return self.index(sourceIndex.column(), sourceIndex.row())
    
        def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex:
            return self.createIndex(row, column)
    
        def parent(self, child: QModelIndex) -> QModelIndex:
            return QModelIndex()
    
        def rowCount(self, parent: QModelIndex = ...) -> int:
            return self.sourceModel().columnCount() if self.sourceModel() else 0
    
        def columnCount(self, parent: QModelIndex = ...) -> int:
            return self.sourceModel().rowCount() if self.sourceModel() else 0
    
        def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> typing.Any:
            if not self.sourceModel():
                return None
            new_orientation = Qt.Vertical if orientation == Qt.Horizontal else Qt.Horizontal
            return self.sourceModel().headerData(section, new_orientation, role)
    
    0 讨论(0)
提交回复
热议问题