c++ - 如何创建 QTableWidgetItem 右对齐的长文本,左侧有省略号?

标签 c++ qt

假设我有一个 QTableWidget。然后,我为它创建项目

QString pathname="C:\\Directory1\\Directory2\\Directory3\\example.txt";
QTableWidgetItem*item=new QTableWidgetItem(pathname);
item->setTextAlignment(Qt::AlignVCenter | Qt::AlignRight);
ui->myTable->setItem(row, 1, item);

如果该列比路径名更窄,那么我会得到如下内容:

“C:\Directory1\Dir ...”

但是,恕我直言,列显示会更有用,如果它真的是右对齐的,因为路径名的末尾部分要与单元格的右侧部分对齐,而没有对齐的部分' t fit,因为单元格太窄,在左边用省略号(即“...”)表示,例如

“... ectory3\example.txt”

这样,如果同一目录中有很多文件,显示的文本可能会显示完整的文件名,前提是它不太长;而不是只显示路径的左侧部分来显示大量条目,结果它们都显示相同。

我意识到我可以调用以了解在当前字体、间距、粗细等条件下文本字符串将显示多大。然后,我可能会迭代直到找到适合的最大字母;并在上面的代码中将其设置为尽可能多。

但是,我宁愿使用 QStyledItemDelegate 并使用 setItemDelegateForColumn(),做类似的事情;或使用样式表;这样基础数据将是完整且正确的路径名,但要显示它是真正右对齐的 - 即使列对于基础文本来说太窄了。

最佳答案

好的,我找到了一个更简单的解决方案。只有一种方法可以覆盖;而且我不必为每个项目都这样做。感谢您的帮助。

经过一番搜索,阅读了qitemdelegate.cpp的代码,我知道QStyledItemDelegate有一个setOptions方法。我只是无法弄清楚它使用的选项是如何设置或使用的(以对此有用的方式?)。然后,我尝试了不同的搜索,发现了:

Elide modes for QTreeView ,QStandardItemModel

wysota 的回复被证明是一个很好的答案(尽管我不喜欢他的同质化座右铭 - 你会认为他为 M$ 工作)。由此,我想出了:

class elideLeftItemC : public QStyledItemDelegate
{
    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
      const QModelIndex &index) const
    {
        QStyleOptionViewItem opt = option;
        opt.textElideMode=Qt::ElideLeft;
        QStyledItemDelegate::paint(painter, opt, index);
    }
} elideLeftItem;

然后,我可以将它与任何合适的数据类型一起使用,只要我需要省略左侧文本,例如:

ui->twMyTable->setItemDelegateForColumn(0, &elideLeftItem);

可能有一种方法可以将它分配到更远的上游,但这还不错。我可能还测试了列号,就像 wysota 的回答一样,但我喜欢它如何记录哪些列已经修改了代表,哪些列没有这样。通过这种方式,您不必为每个需要左省略文本的实例使用尽可能多的代码。别这样。

关于c++ - 如何创建 QTableWidgetItem 右对齐的长文本,左侧有省略号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53116232/

相关文章:

c++ - Qt QGraphicsScene 添加项目缓慢

c++ - 为什么在键类型中使用引用时 lambda 函数在 std::lower_bound 中不起作用?

c++ - 如何在编程中表示 sqrt(-1)?

c++ - 当 __try __except 不能时如何在 C++ 中捕获错误

python - 如何使用带有 PyQt4 的 QDBusAbstractAdaptor 在 DBus 上公开方法和属性?

c++ - 构建插件以扩展 Qt 应用程序

c++ - 在 Visual C++ 2015 中使用 Catch2

c++ - 等待线程如何影响性能?

Ruby、Qt 和第三方小部件

qt - 使用哪个 Qt 小部件来实现图像缩略图浏览器(显示图 block )?