How to set text alignment on a column of QTableView programmatically?

前端 未结 3 1243
抹茶落季
抹茶落季 2020-12-09 02:48

So far the only solution I have found is to subclass QItemDelegate and implement my alignment rule in the paint() function. Is it really the simplest way?

I am using

相关标签:
3条回答
  • 2020-12-09 03:20
    QSqlTableModel *model2= new QSqlTableModel();
    
    model2->setTable("Save");
    model2->select();
    
    QSortFilterProxyModel *proxy1=new QSortFilterProxyModel();
    proxy1->setSourceModel(model2);
    
    QStandardItemModel *modd=new QStandardItemModel();
    
    for (int z =0; z< proxy1->rowCount(); ++z)
       {
        for (int y =0; y< proxy1->columnCount(); ++y)
            {
            QStandardItem *item= new QStandardItem();
            item->setText(proxy1->index(z,y).data().toString());
            item->setTextAlignment(Qt::AlignCenter);
            modd->setItem(z,y,item);
    
            }
      }
    ui->tableView->setModel(modd);
    
    0 讨论(0)
  • 2020-12-09 03:22

    The alternative to subclussing QItemDelegate is to subclass your model and override data() method.

    QVariant MyModel::data(const QModelIndex& index, int role) const {
        if (index.column() == yourCellIndex && role == Qt::TextAlignmentRole) {
            return Qt::AlignLeft;
        } else {
            return QVariant();
        }
    }
    
    0 讨论(0)
  • 2020-12-09 03:23

    Following works for me:
    http://doc.qt.io/qt-5/qstandarditem.html#setTextAlignment

    void MainWindow::fillTable()
    {
        sudukoItem->setText( "qq" );
        sudukoItem->setTextAlignment(Qt::AlignCenter);
    
        sudukoModel->appendRow( sudukoItem );
        sudukoTable->setModel( sudukoModel );
    
        sudukoTable->setRowHeight( ( sudukoModel->rowCount() - 1 ), 100 );
        sudukoTable->setColumnWidth( ( sudukoModel->columnCount() - 1 ), 100 );
    }
    

    where:

    QTableView*         sudukoTable;
    QStandardItemModel* sudukoModel;
    QModelIndex*        modelIndex;
    
    QStandardItem*      sudukoItem;
    

    Credit goes to this comment: How to set text alignment on a column of QTableView programmatically?

    `item->setTextAlignment(Qt::AlignCenter); work well for me. – Ratah

    0 讨论(0)
提交回复
热议问题