簡體   English   中英

如何使 QT 中使用復選框選中的項目的文本加粗?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM