如何更改QTableView的标题文本?

3
例如,如果标题以英文显示“ColumnName”,我尝试通过处理语言更改事件将其更改为新语言:
QApplication::instance()->installTranslator( translator );
ui->retranslateUi(this);
ui->tableView->retranslate();

然后调用。
model->setHeaderData(0, Qt::Horizontal, tr("ColumnName"), Qt::DisplayRole);
model->headerDataChanged(Qt::Horizontal, 0, 1);

但是这似乎没有触发视图进行更新。所有其他的小部件都以新语言显示。

在派生的模型类中,我还覆盖了QAbstractTableModel headerData()函数:

QVariant MyTableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if (role == Qt::DisplayRole)
    {
    if (orientation == Qt::Horizontal) {
      switch (section)
      {
      case Priority:
        return tr("ColumnName");
      case FileName:
        return tr("Filename");
      default:
        return QString("");
      }
    }
  }  
  return QVariant();
}

1
可能是重复的问题:如何在Qt中为QTableWidget添加带有数据的表头? - undefined
如何更改QTableView的标题栏标题 - undefined
我已经查看了这些条目。第一个已经过时了。在qt 5中不再有这样的方法了。在QTable的视图形式中也没有。第二个只适用于使用QStandardItem模型,而我并没有使用。 - undefined
model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID")); - undefined
@Willeman,我不确定为什么没有任何答案提到这一点,但是你应该在自定义模型中重写headerData()并在那里提供你的表头... - undefined
@Mike 谢谢。实际上我正在覆盖它。将编辑我的问题以反映这一点。 - undefined
1个回答

0
谢谢你的见解。事实证明,在我的派生模型头文件中有一个简单的错误。为了使翻译过程正常工作,该类需要有Q_OBJECT宏的存在。现在它可以正确更新头文件了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接