⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xbeltree.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.**** This file is part of the example classes of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include <QtGui>#include "xbeltree.h"XbelTree::XbelTree(QWidget *parent)    : QTreeWidget(parent){    QStringList labels;    labels << tr("Title") << tr("Location");    header()->setResizeMode(QHeaderView::Stretch);    setHeaderLabels(labels);    folderIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirClosedIcon),                         QIcon::Normal, QIcon::Off);    folderIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirOpenIcon),                         QIcon::Normal, QIcon::On);    bookmarkIcon.addPixmap(style()->standardPixmap(QStyle::SP_FileIcon));}bool XbelTree::read(QIODevice *device){    QString errorStr;    int errorLine;    int errorColumn;    if (!domDocument.setContent(device, true, &errorStr, &errorLine,                                &errorColumn)) {        QMessageBox::information(window(), tr("DOM Bookmarks"),                                 tr("Parse error at line %1, column %2:\n%3")                                 .arg(errorLine)                                 .arg(errorColumn)                                 .arg(errorStr));        return false;    }    QDomElement root = domDocument.documentElement();    if (root.tagName() != "xbel") {        QMessageBox::information(window(), tr("DOM Bookmarks"),                                 tr("The file is not an XBEL file."));        return false;    } else if (root.hasAttribute("version")               && root.attribute("version") != "1.0") {        QMessageBox::information(window(), tr("DOM Bookmarks"),                                 tr("The file is not an XBEL version 1.0 "                                    "file."));        return false;    }    clear();    disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)),               this, SLOT(updateDomElement(QTreeWidgetItem *, int)));    QDomElement child = root.firstChildElement("folder");    while (!child.isNull()) {        parseFolderElement(child);        child = child.nextSiblingElement("folder");    }    connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)),            this, SLOT(updateDomElement(QTreeWidgetItem *, int)));    return true;}bool XbelTree::write(QIODevice *device){    const int IndentSize = 4;    QTextStream out(device);    domDocument.save(out, IndentSize);    return true;}void XbelTree::updateDomElement(QTreeWidgetItem *item, int column){    QDomElement element = domElementForItem.value(item);    if (!element.isNull()) {        if (column == 0) {            QDomElement oldTitleElement = element.firstChildElement("title");            QDomElement newTitleElement = domDocument.createElement("title");            QDomText newTitleText = domDocument.createTextNode(item->text(0));            newTitleElement.appendChild(newTitleText);            element.replaceChild(newTitleElement, oldTitleElement);        } else {            if (element.tagName() == "bookmark")                element.setAttribute("href", item->text(1));        }    }}void XbelTree::parseFolderElement(const QDomElement &element,                                  QTreeWidgetItem *parentItem){    QTreeWidgetItem *item = createItem(element, parentItem);    QString title = element.firstChildElement("title").text();    if (title.isEmpty())        title = QObject::tr("Folder");    item->setFlags(item->flags() | Qt::ItemIsEditable);    item->setIcon(0, folderIcon);    item->setText(0, title);    bool folded = (element.attribute("folded") != "no");    setItemExpanded(item, !folded);    QDomElement child = element.firstChildElement();    while (!child.isNull()) {        if (child.tagName() == "folder") {            parseFolderElement(child, item);        } else if (child.tagName() == "bookmark") {            QTreeWidgetItem *childItem = createItem(child, item);            QString title = child.firstChildElement("title").text();            if (title.isEmpty())                title = QObject::tr("Folder");            childItem->setFlags(item->flags() | Qt::ItemIsEditable);            childItem->setIcon(0, bookmarkIcon);            childItem->setText(0, title);            childItem->setText(1, child.attribute("href"));        } else if (child.tagName() == "separator") {            QTreeWidgetItem *childItem = createItem(child, item);            childItem->setFlags(item->flags() & ~(Qt::ItemIsSelectable | Qt::ItemIsEditable));            childItem->setText(0, QString(30, 0xB7));        }        child = child.nextSiblingElement();    }}QTreeWidgetItem *XbelTree::createItem(const QDomElement &element,                                      QTreeWidgetItem *parentItem){    QTreeWidgetItem *item;    if (parentItem) {        item = new QTreeWidgetItem(parentItem);    } else {        item = new QTreeWidgetItem(this);    }    domElementForItem.insert(item, element);    return item;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -