如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章