zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Qt官方示例-字体采样器

Qt官方 示例 字体 采样器
2023-06-13 09:17:29 时间

❝预览系列字体的例子。❞

  建立字体树显示。

QFontDatabase database;
fontTree->setColumnCount(1);
fontTree->setHeaderLabels(QStringList() << tr("Font"));

foreach (QString family, database.families()) {
    const QStringList styles = database.styles(family);
    if (styles.isEmpty())
        continue;

    QTreeWidgetItem *familyItem = new QTreeWidgetItem(fontTree);
    familyItem->setText(0, family);
    familyItem->setCheckState(0, Qt::Unchecked);
    familyItem->setFlags(familyItem->flags() | Qt::ItemIsAutoTristate);

    foreach (QString style, styles) {
        QTreeWidgetItem *styleItem = new QTreeWidgetItem(familyItem);
        styleItem->setText(0, style);
        styleItem->setCheckState(0, Qt::Unchecked);
        styleItem->setData(0, Qt::UserRole, QVariant(database.weight(family, style)));
        styleItem->setData(0, Qt::UserRole + 1, QVariant(database.italic(family, style)));
    }
}

  绑定信号槽更新字体和状态。

connect(fontTree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
        this, SLOT(showFont(QTreeWidgetItem*)));

  更新字体。

void MainWindow::showFont(QTreeWidgetItem *item)
{
    if (!item)
        return;

    QString family;
    QString style;
    int weight;
    bool italic;

    if (item->parent()) {
        family = item->parent()->text(0);
        style = item->text(0);
        weight = item->data(0, Qt::UserRole).toInt();
        italic = item->data(0, Qt::UserRole + 1).toBool();
    } else {
        family = item->text(0);
        style = item->child(0)->text(0);
        weight = item->child(0)->data(0, Qt::UserRole).toInt();
        italic = item->child(0)->data(0, Qt::UserRole + 1).toBool();
    }

    QString oldText = textEdit->toPlainText().trimmed();
    bool modified = textEdit->document()->isModified();
    textEdit->clear();
    QFont font(family, 32, weight, italic);
    font.setStyleName(style);
    textEdit->document()->setDefaultFont(font);

    QTextCursor cursor = textEdit->textCursor();
    QTextBlockFormat blockFormat;
    blockFormat.setAlignment(Qt::AlignCenter);
    cursor.insertBlock(blockFormat);

    if (modified)
        cursor.insertText(QString(oldText));
    else
        cursor.insertText(QString("%1 %2").arg(family).arg(style));

    textEdit->document()->setModified(modified);
}

关于更多

  • 「QtCreator软件」可以找到:
  • 或在 以下「Qt安装目录」找到:
C:\Qt\{你的Qt版本}\Examples\{你的Qt版本}\widgets\painting\fontsampler
  • 「相关链接」
https://doc.qt.io/qt-5/qtwidgets-painting-fontsampler-example.html