如何在 Qt 中使用 QFileSystemModel 设置文本颜色 QTableView?

Posted

技术标签:

【中文标题】如何在 Qt 中使用 QFileSystemModel 设置文本颜色 QTableView?【英文标题】:How to set text color QTableView with QFileSystemModel in Qt? 【发布时间】:2018-05-21 10:54:11 【问题描述】:

我使用 Qtableview 来显示文件和文件夹(只显示图标、文件名、大小)。 我想为一些特定文件绘制文本颜色(所有文本都在行中)。

例如:以'ABC'开头的文件是灰色的; 'XYZ' 是红色的,...

【问题讨论】:

我会派生一个新的 QStyledItemDelegate,覆盖 paint 并在途中更改 .palette 选项。 它可以为任意行设置文本颜色 【参考方案1】:

最佳做法是使用QIdentityProxyModel 并覆盖data 方法以获得必要的roles。例如:

QVariant MyProxy::data(const QModelIndex &index, int role) const

  // Whatever you want in condition:
  if ( sourceModel()->data(index, Qt::TextRole).toString() == "SomeFile.txt" )
    switch( role )
    
    case Qt::ForegroundRole: return Qt::Red;
    case Qt::BackgroundRole: return Qt::Blue; // or any brush, etc
    default:
      break;
    

  return sourceModel()->data(role);


//...
MyProxy proxy = new MyProxy;
proxy->setSourceModel( yourModel );
view->setModel( proxy );

【讨论】:

但是当重用这个模型时,我无法将 QFileSystemModel 转换为使用一些函数,例如 filePath,... 并且显示大小都是 0 字节 请保持模型不变,只改变行的颜色 @kienbui 你不需要通过代理模型修改任何东西。使用源模型做你想做的事 - 更改将自动应用。 但是当我使用proxymodel时,文件集的大小是0字节

以上是关于如何在 Qt 中使用 QFileSystemModel 设置文本颜色 QTableView?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2017 中使用 Qt 库?

如何使用Qt插件在Qt中进行ROS开发

如何在 Qt 中使用 GeographicLib

如何在 Qt 中使用彩色字符串设置窗口标题?

T28398各脚功能

如何使用 Qt 在 MainWindow 中显示 QForm?