当前位置: 首页>>代码示例>>C++>>正文


C++ QTreeWidgetItem::setFont方法代码示例

本文整理汇总了C++中QTreeWidgetItem::setFont方法的典型用法代码示例。如果您正苦于以下问题:C++ QTreeWidgetItem::setFont方法的具体用法?C++ QTreeWidgetItem::setFont怎么用?C++ QTreeWidgetItem::setFont使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在QTreeWidgetItem的用法示例。


在下文中一共展示了QTreeWidgetItem::setFont方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: PopulateTreeWidgetItems

void FlyLinks::PopulateTreeWidgetItems(
        const QMap<QString,QString>& objDataMap) {

    QMapIterator<QString,QString> objIterMap(objDataMap);
    QFont font;
    font.setPointSizeF(8.25);
    font.setUnderline(true);
    m_pObjPopup->setSortingEnabled(false);

    QBrush brush(QColor(85, 0, 255, 255));
    brush.setStyle(Qt::NoBrush);

    QTreeWidgetItem *pItem = new QTreeWidgetItem(m_pObjPopup);
    pItem = m_pObjPopup->headerItem();
    pItem->setText(0,tr("1"));
    pItem->setFont(0, font);
    pItem->setForeground(0, brush);
    pItem->setTextAlignment(0, Qt::AlignLeft);
    m_pObjTreeItemsVec.push_back(pItem);

    int iCount = 0;
    while(objIterMap.hasNext()) {
        objIterMap.next();
        QBrush brush(QColor(85, 0, 255, 255));
        brush.setStyle(Qt::NoBrush);
        QTreeWidgetItem *pItem = new QTreeWidgetItem(m_pObjPopup);
        pItem = m_pObjPopup->topLevelItem(iCount++);
        pItem->setText(0,objIterMap.key());
        pItem->setData(0,Qt::UserRole,objIterMap.value());
        pItem->setFont(0, font);
        pItem->setForeground(0, brush);
        pItem->setTextAlignment(0, Qt::AlignLeft);
    }
}
开发者ID:PSaraph,项目名称:FlyLabel,代码行数:34,代码来源:FlyLinks.cpp

示例2: showDrugsDatabaseInformation

/** Show the database information dialog with all DrugsDB::IDrugEngine report */
void DrugsCentralWidget::showDrugsDatabaseInformation()
{
    const DrugsDB::DatabaseInfos *info = drugsBase().actualDatabaseInformation();
    if (!info)
        return;

    QProgressDialog progress(this);
    progress.setLabelText(tr("Preparing database and drug engines report"));
    progress.setRange(0, 0);
    progress.setValue(0);
    progress.show();

    drugsBase().setConnectionName(DrugsDB::Constants::DB_DRUGS_NAME);
    Utils::DatabaseInformationDialog dlg(this);
    dlg.setTitle(tkTr(Trans::Constants::DRUGS_DATABASE_INFORMATION));
    dlg.setDatabase(drugsBase());
    info->toTreeWidget(dlg.getHeaderTreeWidget());

    // add drug engines report
    QList<DrugsDB::IDrugEngine*> engines = pluginManager()->getObjects<DrugsDB::IDrugEngine>();
    QFont bold;
    bold.setBold(true);
    QFont mono("monospace");
    mono.setStyleHint(QFont::Monospace);
    foreach(DrugsDB::IDrugEngine *engine, engines) {
        QTreeWidgetItem *item = new QTreeWidgetItem(dlg.getHeaderTreeWidget(), QStringList() << tr("Drug engine report: %1").arg(engine->name()));
        item->setFont(0, bold);
        item->setFirstColumnSpanned(true);
        QString reportText = engine->engineDataReport();
        QTreeWidgetItem *report = new QTreeWidgetItem(item, QStringList() << reportText);
        report->setFont(0, mono);
        report->setFirstColumnSpanned(true);
        if (!reportText.isEmpty())
            item->setExpanded(true);
    }
开发者ID:Dinesh-Ramakrishnan,项目名称:freemedforms,代码行数:36,代码来源:drugscentralwidget.cpp

示例3: updateItem

void PreferencesDialog::updateItem(QTreeWidgetItem &item)
{
    pref_t *pref = item.data(pref_ptr_col_, Qt::UserRole).value<pref_t *>();
    if (!pref) return;

    QString cur_value = gchar_free_to_qstring(prefs_pref_to_str(pref, pref_stashed)).remove(QRegExp("\n\t"));
    bool is_changed = false;
    QFont font = item.font(0);

    if (pref->type == PREF_UAT || pref->type == PREF_CUSTOM) {
        item.setText(1, tr("Unknown"));
    } else if (stashedPrefIsDefault(pref)) {
        item.setText(1, tr("Default"));
    } else {
        item.setText(1, tr("Changed"));
        is_changed = true;
    }
    font.setBold(is_changed);
    item.setFont(0, font);
    item.setFont(0, font);
    item.setFont(1, font);
    item.setFont(2, font);
    item.setFont(3, font);

    item.setText(3, cur_value);
}
开发者ID:,项目名称:,代码行数:26,代码来源:

示例4: fixedFont

MeshTreeWidgetItem::MeshTreeWidgetItem(MeshTree* /*meshTree*/, vcg::AlignPair::Result *A, MeshTreeWidgetItem *parent)
{
		n=0;
		a=A;
		parent->addChild(this);
		QString buf=QString("Arc: %1 -> %2 Area: %3 Err: %4 Sample# %5 (%6)")
			.arg((*A).FixName)
			.arg((*A).MovName)
			.arg((*A).area, 6,'f',3)
			.arg((*A).err,  6,'f',3)
			.arg((*A).ap.SampleNum,6)
			.arg((*A).as.LastSampleUsed() );
			setText(3,buf);

			QFont fixedFont("Courier");
			std::vector<vcg::AlignPair::Stat::IterInfo> &I= (*A).as.I;
			QTreeWidgetItem *itemArcIter;
			buf.sprintf("Iter - MinD -  Error - Sample - Used - DistR - BordR - AnglR  ");
			//          " 12   123456  1234567   12345  12345   12345   12345   12345
			itemArcIter = new QTreeWidgetItem(this);
			itemArcIter->setFont(3,fixedFont);
			itemArcIter->setText(3,buf);
			for(int qi=0;qi<I.size();++qi)
			{
				buf.sprintf(" %02i   %6.2f  %7.4f   %05i  %05i  %5i  %5i  %5i",
										qi, I[qi].MinDistAbs, I[qi].pcl50,
										I[qi].SampleTested,I[qi].SampleUsed,I[qi].DistanceDiscarded,I[qi].BorderDiscarded,I[qi].AngleDiscarded );
				itemArcIter = new QTreeWidgetItem(this);
				itemArcIter->setFont(3,fixedFont);
				itemArcIter->setText(3,buf);
			}
}
开发者ID:GuoXinxiao,项目名称:meshlab,代码行数:32,代码来源:alignDialog.cpp

示例5: fillTransportList

void TransportListView::fillTransportList()
{
  // try to preserve the selection
  int selected = -1;
  if ( currentItem() ) {
    selected = currentItem()->data( 0, Qt::UserRole ).toInt();
  }

  clear();
  foreach ( Transport *t, TransportManager::self()->transports() ) {
    QTreeWidgetItem *item = new QTreeWidgetItem( this );
    item->setData( 0, Qt::UserRole, t->id() );
    QString name = t->name();
    if ( TransportManager::self()->defaultTransportId() == t->id() ) {
      name += i18nc( "@label the default mail transport", " (Default)" );
      QFont font( item->font(0) );
      font.setBold( true );
      item->setFont( 0, font );
    }
    item->setText( 0, name );
    item->setText( 1, t->transportType().name() );
    if ( t->id() == selected ) {
      setCurrentItem( item );
    }
  }
开发者ID:pvuorela,项目名称:kcalcore,代码行数:25,代码来源:transportlistview.cpp

示例6: QTreeWidget

CategoryWidget::CategoryWidget(QWidget *parent) : QTreeWidget(parent), d(new CategoryWidgetPrivate()) {
  connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(toggleItemState(QModelIndex)));
  connect(this, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), this, SLOT(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
  // get elements from the element manager
  QStringList categories = ElementManager::instance()->categories();
  // create the category nodes
  QHash<QString, QTreeWidgetItem *> categoryNodes;
  foreach(QString category, categories) {
    QTreeWidgetItem *parent = 0;
    int numSections = category.count("/") + 1;
    for (int i = 0; i < numSections; ++i) {
      QString path = category.section("/", 0, i, QString::SectionSkipEmpty);
      if (!categoryNodes.contains(path)) {
        QTreeWidgetItem *node = new QTreeWidgetItem();
        if (parent == 0)
          this->addTopLevelItem(node);
        else
          parent->addChild(node);
        QString name = category.section("/", i, i, QString::SectionSkipEmpty);
        node->setText(0, qApp->translate("Categories", name.toUtf8()));
        node->setData(0, Qt::UserRole, name);
        node->setData(1, Qt::UserRole, path);
        // use bigger fonts for items at higher levels
        QFont font = node->font(0);
        font.setPointSize(font.pointSize() + 2 - qMin(i, 3));
        node->setFont(0, font);
        if (i >= 3)
          node->setTextColor(0, QColor(96, 96, 96));
        categoryNodes[path] = node;
      }
      parent = categoryNodes[path];
    }
  }
开发者ID:aavci1,项目名称:shopdesigner,代码行数:33,代码来源:CategoryWidget.cpp

示例7: reloadEmployeeList

void EmployeeCentre::reloadEmployeeList()
{
	ui->trvEmployees->invisibleRootItem()->takeChildren();

	QSqlQuery qu = QSqlDatabase::database().exec("SELECT * FROM Employees");
	if (qu.lastError().isValid()){
		PayrollMainWindow::instance()->showQueryError(qu);
		return;
	}

	//All Ok
	while (qu.next()) {
		QString id = qu.record().value("EmployeeID").toString();
		QString combinedName = qu.record().value("FirstName").toString() + " "
				+ qu.record().value("MiddleName").toString() + " "
				+ qu.record().value("LastName").toString();

		QTreeWidgetItem *it = new QTreeWidgetItem(ui->trvEmployees);
		it->setText(0, combinedName);
		it->setText(99, id);

		if (id == currentEmployeeId) {
			//This is the current employee
			QFont fnt = it->font(0);
			fnt.setBold(true);
			it->setFont(0, fnt);
			ui->trvEmployees->scrollToItem(it);
		}
	}

	ui->trvEmployees->resizeColumnToContents(0);
}
开发者ID:josh-wambua,项目名称:payroll,代码行数:32,代码来源:employeecentre.cpp

示例8: populateTreeWidget

void ccPluginDlg::populateTreeWidget(QObject *plugin, const QString &name, const QString &path)
{
	QTreeWidgetItem *pluginItem = new QTreeWidgetItem(treeWidget);
	pluginItem->setText(0, name);
	treeWidget->setItemExpanded(pluginItem, true);

	QFont boldFont = pluginItem->font(0);
	boldFont.setBold(true);
	pluginItem->setFont(0, boldFont);

	if ( !path.isEmpty() )
	{
		pluginItem->setToolTip( 0, path );
	}
	
	if ( plugin == nullptr )
		return;
	
	ccPluginInterface *ccPlugin = qobject_cast<ccPluginInterface*>(plugin);
	
	if ( ccPlugin == nullptr )
		return;

	QStringList features;
	features += QString("name: %1").arg(ccPlugin->getName());
	addItems(pluginItem, "CloudCompare Plugin", features);
}
开发者ID:FrankHXW,项目名称:trunk,代码行数:27,代码来源:ccPluginDlg.cpp

示例9: AddItems

void ImportedBookmarksPreviewDialog::AddItems()
{
    const int rootFolderIntId = (elist->importSource == ImportedEntityList::Source_Firefox ? 1 : 0);
    ui->chkRemoveImportedFile->setVisible(elist->importSource == ImportedEntityList::Source_Files);
    ui->chkRemoveImportedFile->setChecked(elist->removeImportedFiles);

    int index = 0;
    foreach (const ImportedBookmarkFolder& ibf, elist->ibflist)
    {
        QTreeWidgetItem* twi = new QTreeWidgetItem();
        twi->setText(0, ibf.title);
        twi->setIcon(0, icon_folder);
        twi->setData(0, TWID_IsFolder, true);
        twi->setData(0, TWID_Index, index);
        folderItems[ibf.intId] = twi;
        index++;

        //On Firefox, files and Urls, don't add or show the root folder.
        if (ibf.intId == rootFolderIntId && (elist->importSource == ImportedEntityList::Source_Firefox ||
                                             elist->importSource == ImportedEntityList::Source_Files ||
                                             elist->importSource == ImportedEntityList::Source_Urls))
            continue;

        if (ibf.parentId <= rootFolderIntId)
            ui->twBookmarks->addTopLevelItem(twi);
        else
            folderItems[ibf.parentId]->addChild(twi);
    }

    index = 0;
    foreach (const ImportedBookmark& ib, elist->iblist)
    {
        QTreeWidgetItem* twi = new QTreeWidgetItem();
        twi->setText(0, ib.title);
        SetBookmarkItemIcon(twi, ib);
        twi->setToolTip(0, ib.uri);
        twi->setData(0, TWID_IsFolder, false);
        twi->setData(0, TWID_Index, index);
        bookmarkItems[ib.intId] = twi;
        index++;

        if (ib.title.trimmed().isEmpty())
        {
            //For [title-less bookmarks] show their url in a different formatting.
            twi->setText(0, Util::FullyPercentDecodedUrl(ib.uri));
            twi->setTextColor(0, QColor(192, 128, 0));
            QFont italicFont = twi->font(0);
            italicFont.setItalic(true);
            twi->setFont(0, italicFont);
        }

        if (ib.parentId <= 0)
            ui->twBookmarks->addTopLevelItem(twi);
        else
            folderItems[ib.parentId]->addChild(twi);
    }

    ui->twBookmarks->expandAll();
    ui->twBookmarks->setCurrentItem(ui->twBookmarks->topLevelItem(0));
}
开发者ID:hossein,项目名称:BookmarkManager,代码行数:60,代码来源:ImportedBookmarksPreviewDialog.cpp

示例10: on_deleteToolButton_clicked

void ProfileDialog::on_deleteToolButton_clicked()
{
    QTreeWidgetItem *item = pd_ui_->profileTreeWidget->currentItem();

    if (item) {
        GList *fl_entry = VariantPointer<GList>::asPtr(item->data(0, Qt::UserRole));
        profile_def *profile = (profile_def *) fl_entry->data;
        if (profile->is_global || item->font(0).strikeOut()) {
            return;
        }
        if (profile->status == PROF_STAT_DEFAULT) {
            QFont ti_font = item->font(0);
            ti_font.setStrikeOut(true);
            item->setFont(0, ti_font);
            updateWidgets();
        } else {
            delete item;

            // Select the default
            pd_ui_->profileTreeWidget->setCurrentItem(pd_ui_->profileTreeWidget->topLevelItem(0));

            remove_from_profile_list(fl_entry);
        }
    }
}
开发者ID:acaceres2176,项目名称:wireshark,代码行数:25,代码来源:profile_dialog.cpp

示例11: updateItemLook

 void LocalVariableEditor::updateItemLook( QtBrowserItem *item )
 {
     VariableEditor::updateItemLook(item);
     QTreeWidgetItem* pTreeItem = browserItemToItem(item);
     QFont font = pTreeItem->font(0);
     auto pVariable = m_pManager->getVariable(item->property());
     if(item->property()->propertyName() == "this" && pVariable)
     {
         font.setBold(true);
     }
     else 
     {
         font.setBold(false);
     }
     pTreeItem->setFont(0, font);
     if(pVariable == nullptr 
         AND NOT(item->property()->propertyName().isEmpty()) 
         AND getLocalVariableModel()->isWatchProperty(item->property()))
     {
         setBackgroundColor(item, QColor(255,0,0,64));
     }
     else 
     {
         setBackgroundColor(item, calculatedBackgroundColor(item));
     }
 }
开发者ID:Masstronaut,项目名称:phantom-cpp,代码行数:26,代码来源:LocalVariableEditor.cpp

示例12: fnt

void K3b::DataMultisessionImportDialog::addMedium( const K3b::Medium& medium )
{
    QTreeWidgetItem* mediumItem = new QTreeWidgetItem( d->sessionView );
    QFont fnt( mediumItem->font(0) );
    fnt.setBold( true );
    mediumItem->setText( 0, medium.shortString() );
    mediumItem->setFont( 0, fnt );
    mediumItem->setIcon( 0, QIcon::fromTheme("media-optical-recordable") );

    const K3b::Device::Toc& toc = medium.toc();
    QTreeWidgetItem* sessionItem = 0;
    int lastSession = 0;
    for ( K3b::Device::Toc::const_iterator it = toc.begin(); it != toc.end(); ++it ) {
        const K3b::Device::Track& track = *it;

        if( track.session() != lastSession ) {
            lastSession = track.session();
            QString sessionInfo;
            if ( track.type() == K3b::Device::Track::TYPE_DATA ) {
                K3b::Iso9660 iso( medium.device(), track.firstSector().lba() );
                if ( iso.open() ) {
                    sessionInfo = iso.primaryDescriptor().volumeId;
                }
            }
            else {
                int numAudioTracks = 1;
                while ( it != toc.end()
                        && ( *it ).type() == K3b::Device::Track::TYPE_AUDIO
                        && ( *it ).session() == lastSession ) {
                    ++it;
                    ++numAudioTracks;
                }
                --it;
                sessionInfo = i18np("1 audio track", "%1 audio tracks", numAudioTracks );
            }

            sessionItem = new QTreeWidgetItem( mediumItem, sessionItem );
            sessionItem->setText( 0, i18n( "Session %1", lastSession )
                                     + ( sessionInfo.isEmpty() ? QString() : " (" + sessionInfo + ')' ) );
            if ( track.type() == K3b::Device::Track::TYPE_AUDIO )
                sessionItem->setIcon( 0, QIcon::fromTheme( "audio-x-generic" ) );
            else
                sessionItem->setIcon( 0, QIcon::fromTheme( "application-x-tar" ) );

            d->sessions.insert( sessionItem, SessionInfo( lastSession, medium.device() ) );
        }
    }

    if( 0 == lastSession ) {
        // the medium item in case we have no session info (will always use the last session)
        d->sessions.insert( mediumItem, SessionInfo( 0, medium.device() ) );
    }
    else {
        // we have a session item, there is no need to select the medium as a whole
        mediumItem->setFlags( mediumItem->flags() ^ Qt::ItemIsSelectable );
    }

    mediumItem->setExpanded( true );
}
开发者ID:KDE,项目名称:k3b,代码行数:59,代码来源:k3bdatamultisessionimportdialog.cpp

示例13: QTreeWidgetItem

AudioDeviceConfig::AudioDeviceConfig(QWidget *parent, SoundDevice* soundDevice)
  : QDialog(parent)
{
  setupUi(this);

  soundDevice_ = soundDevice;

  btnOK->setEnabled(false);

  selectedAPI_ = RtAudio::UNSPECIFIED; //RtAudio automatic API selection
  selectedDeviceID_ = 0; //RtAudio automatic device selection
  selectedDeviceName_ = "default device";
  selectedBufferSizeSamples_ = 0; //RtAudio automatic buffer size selection
  selectedNrBuffers_ = 0; //RtAudio automatic nr of buffers selection

  //APInames
  APInames_[RtAudio::UNSPECIFIED] = "UNSPECIFIED";
  APInames_[RtAudio::LINUX_ALSA] = "LINUX_ALSA";
  APInames_[RtAudio::LINUX_OSS] = "LINUX_OSS";
  APInames_[RtAudio::LINUX_JACK] = "LINUX_JACK";
  APInames_[RtAudio::MACOSX_CORE] = "MACOSX_CORE";
  APInames_[RtAudio::IRIX_AL] = "IRIX_AL";
  APInames_[RtAudio::WINDOWS_ASIO] = "WINDOWS_ASIO";
  APInames_[RtAudio::WINDOWS_DS] = "WINDOWS_DS";

  //audioDevicesList
  audioDevicesList->setColumnCount(4);
  QStringList list;
  list << "Installed Audio Devices" << "ID" << "Default" << "Available";
  audioDevicesList->setHeaderLabels(list);
  //populate device list
  listDSdevices();
  listASIOdevices();

  //bufferSizeList
  bufferSizeList->setColumnCount(2);
  bufferSizeList->setItemHidden(bufferSizeList->headerItem(),true);
  QTreeWidgetItem* item = new QTreeWidgetItem(bufferSizeList, QStringList(QString("BufferSize")));
  QFont font;
  font.setPointSize(8);
  font.setBold(true);
  item->setFont(0, font);
  item->setFont(1, font);
  new QTreeWidgetItem(bufferSizeList, QStringList(QString("@ 48KHz")));
  new QTreeWidgetItem(bufferSizeList, QStringList(QString("@ 44.1KHz")));
  new QTreeWidgetItem(bufferSizeList, QStringList(QString("@ 22.05KHz")));
  new QTreeWidgetItem(bufferSizeList, QStringList(QString("@ 16KHz")));
  new QTreeWidgetItem(bufferSizeList, QStringList(QString("@ 11.025KHz")));
  new QTreeWidgetItem(bufferSizeList, QStringList(QString("@ 8KHz")));

  //infoList
  infoList->setColumnCount(1);
  infoList->setHeaderLabels(QStringList("Device Info"));

  //configList
  configList->setColumnCount(1);
  configList->setItemHidden(configList->headerItem(),true);
  listCurrentSoundDeviceConfig();
}
开发者ID:Amos-zq,项目名称:marsyas,代码行数:59,代码来源:audiodeviceconfig.cpp

示例14: addGroup

void LadspaFXSelector::addGroup( QTreeWidget *parent, Tritium::LadspaFXGroup *pGroup )
{
	QTreeWidgetItem* pNewItem = new QTreeWidgetItem( parent );
	QFont f = pNewItem->font( 0 );
	f.setBold( true );
	pNewItem->setFont( 0, f );
	buildGroup( pNewItem, pGroup );
}
开发者ID:lxlxlo,项目名称:composite-devel,代码行数:8,代码来源:LadspaFXSelector.cpp

示例15: addToHistory

  /**
   * Add a single work order to the display. This uses the QUndoCommand text (if it's blank, it uses
   *   the QAction text). If there is no text, this does nothing.
   *
   * @param workOrder The work order to display the history for
   */
  void HistoryTreeWidget::addToHistory(WorkOrder *workOrder) {
    QString data = workOrder->bestText();

    connect(workOrder, SIGNAL(destroyed(QObject *)),
            this, SLOT(removeFromHistory(QObject *)));

    QStringList columnData;
    columnData.append(data);
    columnData.append("");
    columnData.append(workOrder->executionTime().toString());

    QTreeWidgetItem *newItem = new QTreeWidgetItem(columnData);
    newItem->setData(0, Qt::UserRole, qVariantFromValue(workOrder));

    // Do font for save work orders
    if (workOrder->createsCleanState()) {
      QFont saveFont = newItem->font(0);
      saveFont.setBold(true);
      saveFont.setItalic(true);
      newItem->setFont(0, saveFont);
      newItem->setForeground(0, Qt::gray);
    }

    // Do font for progress text
    QFont progressFont = newItem->font(1);
    progressFont.setItalic(true);
    newItem->setFont(1, progressFont);
    newItem->setForeground(1, Qt::gray);

    invisibleRootItem()->addChild(newItem);

    connect(workOrder, SIGNAL(statusChanged(WorkOrder *)),
            this, SLOT(updateStatus(WorkOrder *)));
    connect(workOrder, SIGNAL(creatingProgress(WorkOrder *)),
            this, SLOT(updateProgressWidgets()));
    connect(workOrder, SIGNAL(deletingProgress(WorkOrder *)),
            this, SLOT(updateProgressWidgets()));

    if (workOrder->progressBar()) {
      setItemWidget(newItem, 1, workOrder->progressBar());
    }

    scrollToItem(newItem);
    refit();
  }
开发者ID:jlaura,项目名称:isis3,代码行数:51,代码来源:HistoryTreeWidget.cpp


注:本文中的QTreeWidgetItem::setFont方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。