题 如何以编程方式在QTableView列上设置文本对齐方式?


到目前为止,我发现的唯一解决方案是继承QItemDelegate并在paint()函数中实现我的对齐规则。这真的是最简单的方式吗?

我正在使用C ++ API。


20
2018-02-10 15:17


起源




答案:


继承的替代方法 QItemDelegate 是子模型和覆盖 data() 方法。

QVariant MyModel::data(const QModelIndex& index, int role) const {
    if (index.column() == yourCellIndex && role == Qt::TextAlignmentRole) {
        return Qt::AlignLeft;
    } else {
        return QAbstractTableModel::data(index, role);
    }
}

30
2018-02-10 15:34



我认为返回QAbstractTableModel :: data(索引,角色)是不可能的。因为它是纯虚拟的。你应该返回QVariant()。 doc.qt.io/qt-5/qabstractitemmodel.html#data - pablo_worker
这个答案是在更简单的时候给出的,当时草地更绿,天空更清晰。请随时编辑此答案 - Nekuromento


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);

1
2018-06-05 09:38



请不要只是转储您的代码,解释您的思路。谢谢。 - Cthulhu
`用品 - > setTextAlignment(QT :: AlignCenter);对我有用。 - Ratah