How to Insert checkbox in root of Qtreeview. Treeview is created by using QDOMDocument reading XML file.
-
@JonB Hi Jon, just one more thing needed.
I want to Highlight the items of tree which is selected, like when we do multiple selection using CTRL button, the selected lines should be in blue highlight or their fonts can done Bold to make selected Items looks different.
How should I do it? any idea ? -
@Aviral-0 said in How to Insert checkbox in root of Qtreeview. Treeview is created by using QDOMDocument reading XML file.:
&& !index.parent().isValid()
Ah, well done! I kind of thought that was for a child of the root element, and the root element was that parent. But I think it makes sense, I haven't actually ever used
QTreeView
I don't think.Do you mean you only want to alter presentation when multiple items are selected, not just a single one? Normally you would do colour/font via stylesheet on selected items. But that won't distinguish multiple versus single selection.
QTreeView::selectionModel
/selectedIndexes()
gives you which items/indexes are selected, that's all I know, somehow work from there? -
@JonB I am trying this piece of code:
const bool shouldBeBold = (index.column() == 0);
if (role == Qt::FontRole && shouldBeBold) {
QFont boldFont;
boldFont.setBold(true);
return boldFont;
} else {
return DomModel::data(index, role);
}you repied to this code in past at someone elses pproblem.
but its not working -
@Aviral-0
Debugging techniques:- Put a
qDebug()
into yourif
statement, does it get hit at all? - Set
shouldBeBold = true
unconditionally, does any items come up in bold? - Try, say,
role == Qt::ForegroundRole
andreturn QColor(Qt::red)
, does that work in case it's some bold issue? - If you are doing this on selected items it might be that selection sets font instead, I don't know.
- Put a
-
Hi, Hope you are having a good day.
Now I need the checkboxes to all the parents of child.
I have attached the photo attached of what I need.
What to change in the if condition to make it happen?
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.parent().isValid()) //if ( role == Qt::CheckStateRole && index.column() == 0 && !index.parent().isValid()) if ( role == Qt::CheckStateRole && index.column() == 0 && !index.parent().isValid() ) { 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()); }
-
@Aviral-0
Then upload an image to your post (best, the post toolbar has "cloud" icon tooltip Upload Image), or at worst given a link to where the image can be seen. If you think I am going to download an image you want me to look at from a site , I am not. -