diff options
Diffstat (limited to 'examples/widgets/widgets/charactermap')
4 files changed, 117 insertions, 29 deletions
diff --git a/examples/widgets/widgets/charactermap/characterwidget.cpp b/examples/widgets/widgets/charactermap/characterwidget.cpp index 07912da6ff..55d45501f1 100644 --- a/examples/widgets/widgets/charactermap/characterwidget.cpp +++ b/examples/widgets/widgets/charactermap/characterwidget.cpp @@ -54,11 +54,9 @@ //! [0] CharacterWidget::CharacterWidget(QWidget *parent) - : QWidget(parent) + : QWidget(parent), columns(16), lastKey(-1) { - squareSize = 24; - columns = 16; - lastKey = -1; + calculateSquareSize(); setMouseTracking(true); } //! [0] @@ -67,7 +65,7 @@ CharacterWidget::CharacterWidget(QWidget *parent) void CharacterWidget::updateFont(const QFont &font) { displayFont.setFamily(font.family()); - squareSize = qMax(24, QFontMetrics(displayFont).xHeight() * 3); + calculateSquareSize(); adjustSize(); update(); } @@ -77,7 +75,7 @@ void CharacterWidget::updateFont(const QFont &font) void CharacterWidget::updateSize(const QString &fontSize) { displayFont.setPointSize(fontSize.toInt()); - squareSize = qMax(24, QFontMetrics(displayFont).xHeight() * 3); + calculateSquareSize(); adjustSize(); update(); } @@ -89,7 +87,7 @@ void CharacterWidget::updateStyle(const QString &fontStyle) const QFont::StyleStrategy oldStrategy = displayFont.styleStrategy(); displayFont = fontDatabase.font(displayFont.family(), fontStyle, displayFont.pointSize()); displayFont.setStyleStrategy(oldStrategy); - squareSize = qMax(24, QFontMetrics(displayFont).xHeight() * 3); + calculateSquareSize(); adjustSize(); update(); } @@ -104,6 +102,11 @@ void CharacterWidget::updateFontMerging(bool enable) update(); } +void CharacterWidget::calculateSquareSize() +{ + squareSize = qMax(16, 4 + QFontMetrics(displayFont, this).height()); +} + //! [3] QSize CharacterWidget::sizeHint() const { diff --git a/examples/widgets/widgets/charactermap/characterwidget.h b/examples/widgets/widgets/charactermap/characterwidget.h index 9b87cc9e4b..8f8406f244 100644 --- a/examples/widgets/widgets/charactermap/characterwidget.h +++ b/examples/widgets/widgets/charactermap/characterwidget.h @@ -86,6 +86,8 @@ protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: + void calculateSquareSize(); + QFont displayFont; int columns; int lastKey; diff --git a/examples/widgets/widgets/charactermap/mainwindow.cpp b/examples/widgets/widgets/charactermap/mainwindow.cpp index 2141850f16..8b406ba1ca 100644 --- a/examples/widgets/widgets/charactermap/mainwindow.cpp +++ b/examples/widgets/widgets/charactermap/mainwindow.cpp @@ -54,10 +54,30 @@ #include "mainwindow.h" //! [0] + +Q_DECLARE_METATYPE(QFontComboBox::FontFilter) + MainWindow::MainWindow() { + QMenu *fileMenu = menuBar()->addMenu(tr("File")); + fileMenu->addAction(tr("Quit"), this, &QWidget::close); + QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(tr("Show Font Info"), this, &MainWindow::showInfo); + helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt); + QWidget *centralWidget = new QWidget; + QLabel *filterLabel = new QLabel(tr("Filter:")); + filterCombo = new QComboBox; + filterCombo->addItem(tr("All"), QVariant::fromValue(QFontComboBox::AllFonts)); + filterCombo->addItem(tr("Scalable"), QVariant::fromValue(QFontComboBox::ScalableFonts)); + filterCombo->addItem(tr("Monospaced"), QVariant::fromValue(QFontComboBox::MonospacedFonts)); + filterCombo->addItem(tr("Proportional"), QVariant::fromValue(QFontComboBox::ProportionalFonts)); + filterCombo->setCurrentIndex(0); + typedef void (QComboBox::*QComboBoxIntSignal)(int); + connect(filterCombo, static_cast<QComboBoxIntSignal>(&QComboBox::currentIndexChanged), + this, &MainWindow::filterChanged); + QLabel *fontLabel = new QLabel(tr("Font:")); fontCombo = new QFontComboBox; QLabel *sizeLabel = new QLabel(tr("Size:")); @@ -80,38 +100,39 @@ MainWindow::MainWindow() //! [2] lineEdit = new QLineEdit; + lineEdit->setClearButtonEnabled(true); #ifndef QT_NO_CLIPBOARD QPushButton *clipboardButton = new QPushButton(tr("&To clipboard")); //! [2] -//! [3] - clipboard = QApplication::clipboard(); -//! [3] #endif //! [4] - connect(fontCombo, SIGNAL(currentFontChanged(QFont)), - this, SLOT(findStyles(QFont))); - connect(fontCombo, SIGNAL(currentFontChanged(QFont)), - this, SLOT(findSizes(QFont))); - connect(fontCombo, SIGNAL(currentFontChanged(QFont)), - characterWidget, SLOT(updateFont(QFont))); - connect(sizeCombo, SIGNAL(currentIndexChanged(QString)), - characterWidget, SLOT(updateSize(QString))); - connect(styleCombo, SIGNAL(currentIndexChanged(QString)), - characterWidget, SLOT(updateStyle(QString))); + connect(fontCombo, &QFontComboBox::currentFontChanged, + this, &MainWindow::findStyles); + connect(fontCombo, &QFontComboBox::currentFontChanged, + this, &MainWindow::findSizes); + connect(fontCombo, &QFontComboBox::currentFontChanged, + characterWidget, &CharacterWidget::updateFont); + typedef void (QComboBox::*QComboBoxStringSignal)(const QString &); + connect(sizeCombo, static_cast<QComboBoxStringSignal>(&QComboBox::currentIndexChanged), + characterWidget, &CharacterWidget::updateSize); + connect(styleCombo, static_cast<QComboBoxStringSignal>(&QComboBox::currentIndexChanged), + characterWidget, &CharacterWidget::updateStyle); //! [4] //! [5] - connect(characterWidget, SIGNAL(characterSelected(QString)), - this, SLOT(insertCharacter(QString))); + connect(characterWidget, &CharacterWidget::characterSelected, + this, &MainWindow::insertCharacter); #ifndef QT_NO_CLIPBOARD - connect(clipboardButton, SIGNAL(clicked()), this, SLOT(updateClipboard())); + connect(clipboardButton, &QAbstractButton::clicked, this, &MainWindow::updateClipboard); #endif //! [5] - connect(fontMerging, SIGNAL(toggled(bool)), characterWidget, SLOT(updateFontMerging(bool))); + connect(fontMerging, &QAbstractButton::toggled, characterWidget, &CharacterWidget::updateFontMerging); //! [6] QHBoxLayout *controlsLayout = new QHBoxLayout; + controlsLayout->addWidget(filterLabel); + controlsLayout->addWidget(filterCombo, 1); controlsLayout->addWidget(fontLabel); controlsLayout->addWidget(fontCombo, 1); controlsLayout->addWidget(sizeLabel); @@ -163,6 +184,14 @@ void MainWindow::findStyles(const QFont &font) } //! [8] +void MainWindow::filterChanged(int f) +{ + const QFontComboBox::FontFilter filter = + filterCombo->itemData(f).value<QFontComboBox::FontFilter>(); + fontCombo->setFontFilters(filter); + statusBar()->showMessage(tr("%n font(s) found", 0, fontCombo->count())); +} + void MainWindow::findSizes(const QFont &font) { QFontDatabase fontDatabase; @@ -208,9 +237,63 @@ void MainWindow::insertCharacter(const QString &character) void MainWindow::updateClipboard() { //! [11] - clipboard->setText(lineEdit->text(), QClipboard::Clipboard); + QGuiApplication::clipboard()->setText(lineEdit->text(), QClipboard::Clipboard); //! [11] - clipboard->setText(lineEdit->text(), QClipboard::Selection); + QGuiApplication::clipboard()->setText(lineEdit->text(), QClipboard::Selection); } #endif + +class FontInfoDialog : public QDialog +{ +public: + explicit FontInfoDialog(QWidget *parent = Q_NULLPTR); + +private: + QString text() const; +}; + +FontInfoDialog::FontInfoDialog(QWidget *parent) : QDialog(parent) +{ + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + QVBoxLayout *mainLayout = new QVBoxLayout(this); + QPlainTextEdit *textEdit = new QPlainTextEdit(text(), this); + textEdit->setReadOnly(true); + textEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); + mainLayout->addWidget(textEdit); + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this); + connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); + mainLayout->addWidget(buttonBox); +} + +QString FontInfoDialog::text() const +{ + QString text; + QTextStream str(&text); + const QFont defaultFont = QFontDatabase::systemFont(QFontDatabase::GeneralFont); + const QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont); + const QFont titleFont = QFontDatabase::systemFont(QFontDatabase::TitleFont); + const QFont smallestReadableFont = QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont); + + str << "Qt " << QT_VERSION_STR << " on " << QGuiApplication::platformName() + << ", " << logicalDpiX() << "DPI"; + if (!qFuzzyCompare(devicePixelRatioF(), qreal(1))) + str << ", device pixel ratio: " << devicePixelRatioF(); + str << "\n\nDefault font : " << defaultFont.family() << ", " << defaultFont.pointSizeF() << "pt\n" + << "Fixed font : " << fixedFont.family() << ", " << fixedFont.pointSizeF() << "pt\n" + << "Title font : " << titleFont.family() << ", " << titleFont.pointSizeF() << "pt\n" + << "Smallest font: " << smallestReadableFont.family() << ", " << smallestReadableFont.pointSizeF() << "pt\n"; + + return text; +} + +void MainWindow::showInfo() +{ + const QRect screenGeometry = QApplication::desktop()->screenGeometry(this); + FontInfoDialog *dialog = new FontInfoDialog(this); + dialog->setWindowTitle(tr("Fonts")); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->resize(screenGeometry.width() / 4, screenGeometry.height() / 4); + dialog->show(); +} + //! [10] diff --git a/examples/widgets/widgets/charactermap/mainwindow.h b/examples/widgets/widgets/charactermap/mainwindow.h index 2865eacc00..eac16b35fa 100644 --- a/examples/widgets/widgets/charactermap/mainwindow.h +++ b/examples/widgets/widgets/charactermap/mainwindow.h @@ -73,18 +73,18 @@ public: MainWindow(); public slots: + void filterChanged(int); void findStyles(const QFont &font); void findSizes(const QFont &font); void insertCharacter(const QString &character); #ifndef QT_NO_CLIPBOARD void updateClipboard(); #endif + void showInfo(); private: CharacterWidget *characterWidget; -#ifndef QT_NO_CLIPBOARD - QClipboard *clipboard; -#endif + QComboBox *filterCombo; QComboBox *styleCombo; QComboBox *sizeCombo; QFontComboBox *fontCombo; |