[英]How to make text Bold of the Item selected with Checkbox in QT?
我想在 QT DOM Model 中以粗體格式檢查項目。有關完整代碼,請點擊 Git 鏈接。 https://github.com/aviralarpit/QTreeView_with_XML
QVariant DomModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
DomItem *item = static_cast<DomItem*>(index.internalPointer());
const QDomNode node = item->node();
if ( role == Qt::CheckStateRole && (index.column() == 0) && hasChildren(index) )
return static_cast< int >( item->isChecked() ? Qt::Checked : Qt::Unchecked );
if (role != Qt::DisplayRole)
return QVariant();
switch (index.column()) {
case 0:
return node.nodeName();
case 1:
{
const QDomNamedNodeMap attributeMap = node.attributes();
QStringList attributes;
for (int i = 0; i < attributeMap.count(); ++i) {
QDomNode attribute = attributeMap.item(i);
attributes << attribute.nodeName() + "=\""
+ attribute.nodeValue() + '"';
}
return attributes.join(' ');
}
case 2:
return node.nodeValue().split('\n').join(' ');
default:
break;
}
return item->data(index.column());
}
標志 function
Qt::ItemFlags DomModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::NoItemFlags;
Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
if ( index.column() == 0 )
flags |= Qt::ItemIsUserCheckable;
return flags;
}
設置數據 function
bool DomModel::setData(const QModelIndex &index, const QVariant &value, int role) {
DomItem *item = static_cast<DomItem*>(index.internalPointer());
if (index.column() == 0 ){
if (role == Qt::EditRole) {
return false;
}
if (role == Qt::CheckStateRole) {
item->setChecked(value.toBool());
emit dataChanged(index, index);
return true;
}
}
return QAbstractItemModel::setData(index, value, role);
}
在您的data()
function 中,為Qt::FontRole
項目數據角色添加一個案例。 然后只返回一個QFont
實例,它看起來像你想要的樣子,具體取決於項目的支票 state。
if (role == Qt::FontRole && item->isChecked()) {
QFont font;
font.setBold(true);
return font;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.