C++/Qt
- Color Dialog
- Drag Drop
- Draw Shape
- Layout
- Open File Dialog
- QAbstractItemModel
- QAbstractItemView
- QAbstractListModel
- QAbstractTableModel
- QAction
- QApplication
- QAssistantClient
- QBrush
- QBuffer
- QByteArray
- QCalendarWidget
- QCheckBox
- QComboBox
- QContextMenuEvent
- QDBusMessage
- QDataStream
- QDate
- QDesignerCustomWidgetInterface
- QDialog
- QDir
- QDirModel
- QDockWidget
- QDomDocument
- QDomElement
- QDomNode
- QDoubleValidator
- QDrive
- QEvent
- QFile
- QFileDialog
- QFileInfo
- QFocusEvent
- QFrame
- QFtp
- QGraphicsItem
- QGraphicsPolygonItem
- QGraphicsRectItem
- QGraphicsView
- QGridLayout
- QGroupBox
- QHBoxLayout
- QHash
- QImage
- QImageWriter
- QInputDialog
- QKeyEvent
- QLCDNumber
- QLabel
- QLayout
- QLineEdit
- QLinearGradient
- QList
- QListIterator
- QListView
- QListWidget
- QListWidgetItem
- QMap
- QMenu
- QMessageBox
- QMouseEvent
- QMovie
- QMultiHash
- QMultiMap
- QMutableIterators
- QMutableListIterator
- QMutexLocker
- QNetworkAccessManager
- QObject
- QPainter
- QPalette
- QPen
- QPixmap
- QPlainTextEdit
- QPointer
- QPrintDialog
- QPrinter
- QProcess
- QProgressBar
- QPushButton
- QQueue
- QRadialGradient
- QRadioButton
- QReadWriteLock
- QRegExp
- QRegExpValidator
- QScriptEngine
- QSemaphore
- QSet
- QSlider
- QSortFilterProxyModel
- QSpinBox
- QSplashScreen
- QSplitter
- QSqlDatabase
- QSqlRelationalTableModel
- QSqlTableModel
- QStack
- QStackedLayout
- QStackedWidget
- QStandardItem
- QStandardItemModel
- QStatusBar
- QString
- QStringList
- QStringListModel
- QStyle
- QSvgWidget
- QSystemTrayIcon
- QTabWidget
- QTableView
- QTableWidget
- QTabletEvent
- QTcpServer
- QTcpSocket
- QTest
- QTextBlockFormat
- QTextBrowser
- QTextCharFormat
- QTextCursor
- QTextDocument
- QTextEdit
- QTextFrame
- QTextImageFormat
- QTextList
- QTextStream
- QTextTableFormat
- QThread
- QTime
- QTimeLine
- QTimer
- QToolBar
- QTranslator
- QTreeView
- QTreeWidget
- QTreeWidgetItem
- QUdpSocket
- QUiLoader
- QVBoxLayout
- QVector
- QWhatsThis
- QWidget
- QWindowsStyle
- QWizard
- QX11EmbedContainer
- QX11EmbedWidget
- QXmlDefaultHandler
- QXmlStreamWriter
- Signal
- Sqlite
- ToolTip
- Window
- foreach
- qBinaryFind
- qCopyBackward
- qDebug
- qLowerBound
- qMin
- qSort
Содержание
character painter widget
<source lang="cpp">
/****************************************************************************
- Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
- All rights reserved.
- Contact: Nokia Corporation (qt-info@nokia.com)
- This file is part of the examples of the Qt Toolkit.
- $QT_BEGIN_LICENSE:LGPL$
- Commercial Usage
- Licensees holding valid Qt Commercial licenses may use this file in
- accordance with the Qt Commercial License Agreement provided with the
- Software or, alternatively, in accordance with the terms contained in
- a written agreement between you and Nokia.
- GNU Lesser General Public License Usage
- Alternatively, this file may be used under the terms of the GNU Lesser
- General Public License version 2.1 as published by the Free Software
- Foundation and appearing in the file LICENSE.LGPL included in the
- packaging of this file. Please review the following information to
- ensure the GNU Lesser General Public License version 2.1 requirements
- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
- In addition, as a special exception, Nokia gives you certain additional
- rights. These rights are described in the Nokia Qt LGPL Exception
- version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
- GNU General Public License Usage
- Alternatively, this file may be used under the terms of the GNU
- General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
- met: http://www.gnu.org/copyleft/gpl.html.
- If you have questions regarding the use of this file, please contact
- Nokia at qt-info@nokia.com.
- $QT_END_LICENSE$
-
- /
- ifndef CHARACTERWIDGET_H
- define CHARACTERWIDGET_H
- include <QFont>
- include <QPoint>
- include <QSize>
- include <QString>
- include <QWidget>
QT_BEGIN_NAMESPACE class QMouseEvent; class QPaintEvent; QT_END_NAMESPACE
class CharacterWidget : public QWidget {
Q_OBJECT
public:
CharacterWidget(QWidget *parent = 0); QSize sizeHint() const;
public slots:
void updateFont(const QFont &font); void updateSize(const QString &fontSize); void updateStyle(const QString &fontStyle); void updateFontMerging(bool enable);
signals:
void characterSelected(const QString &character);
protected:
void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void paintEvent(QPaintEvent *event);
private:
QFont displayFont; int columns; int lastKey; int squareSize;
};
- endif
- include <QtGui>
- include "characterwidget.h"
CharacterWidget::CharacterWidget(QWidget *parent)
: QWidget(parent)
{
squareSize = 24; columns = 16; lastKey = -1; setMouseTracking(true);
}
void CharacterWidget::updateFont(const QFont &font) {
displayFont.setFamily(font.family()); squareSize = qMax(24, QFontMetrics(displayFont).xHeight() * 3); adjustSize(); update();
}
void CharacterWidget::updateSize(const QString &fontSize) {
displayFont.setPointSize(fontSize.toInt()); squareSize = qMax(24, QFontMetrics(displayFont).xHeight() * 3); adjustSize(); update();
}
void CharacterWidget::updateStyle(const QString &fontStyle) {
QFontDatabase fontDatabase; const QFont::StyleStrategy oldStrategy = displayFont.styleStrategy(); displayFont = fontDatabase.font(displayFont.family(), fontStyle, displayFont.pointSize()); displayFont.setStyleStrategy(oldStrategy); squareSize = qMax(24, QFontMetrics(displayFont).xHeight() * 3); adjustSize(); update();
} void CharacterWidget::updateFontMerging(bool enable) {
if (enable) displayFont.setStyleStrategy(QFont::PreferDefault); else displayFont.setStyleStrategy(QFont::NoFontMerging); adjustSize(); update();
}
QSize CharacterWidget::sizeHint() const {
return QSize(columns*squareSize, (65536/columns)*squareSize);
}
void CharacterWidget::mouseMoveEvent(QMouseEvent *event) {
QPoint widgetPosition = mapFromGlobal(event->globalPos()); uint key = (widgetPosition.y()/squareSize)*columns + widgetPosition.x()/squareSize;QString text = QString::fromLatin1("
Character: ").arg(displayFont.family()) + QChar(key) + QString::fromLatin1("<p>Value: 0x") + QString::number(key, 16); QToolTip::showText(event->globalPos(), text, this); } void CharacterWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { lastKey = (event->y()/squareSize)*columns + event->x()/squareSize; if (QChar(lastKey).category() != QChar::NoCategory) emit characterSelected(QString(QChar(lastKey))); update(); } else QWidget::mousePressEvent(event); } void CharacterWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.fillRect(event->rect(), QBrush(Qt::white)); painter.setFont(displayFont); QRect redrawRect = event->rect(); int beginRow = redrawRect.top()/squareSize; int endRow = redrawRect.bottom()/squareSize; int beginColumn = redrawRect.left()/squareSize; int endColumn = redrawRect.right()/squareSize; painter.setPen(QPen(Qt::gray)); for (int row = beginRow; row <= endRow; ++row) { for (int column = beginColumn; column <= endColumn; ++column) { painter.drawRect(column*squareSize, row*squareSize, squareSize, squareSize); } } QFontMetrics fontMetrics(displayFont); painter.setPen(QPen(Qt::black)); for (int row = beginRow; row <= endRow; ++row) { for (int column = beginColumn; column <= endColumn; ++column) { int key = row*columns + column; painter.setClipRect(column*squareSize, row*squareSize, squareSize, squareSize); if (key == lastKey) painter.fillRect(column*squareSize + 1, row*squareSize + 1, squareSize, squareSize, QBrush(Qt::red)); painter.drawText(column*squareSize + (squareSize / 2) - fontMetrics.width(QChar(key))/2, row*squareSize + 4 + fontMetrics.ascent(), QString(QChar(key))); } } }
- ifndef MAINWINDOW_H
- define MAINWINDOW_H
- include <QMainWindow>
- include <QString>
- endif
- include <QtGui>
- include "characterwidget.h"
- include "mainwindow.h"
- include <QApplication>
- include "mainwindow.h"
Create QFont
<source lang="cpp"> Foundations of Qt Development\Chapter07\paths\main.cpp /*
* Copyright (c) 2006-2007, Johan Thelin * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of APress nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */
- include <QApplication>
- include <QPainter>
- include <QPainterPath>
- include <QPixmap>
int main( int argc, char **argv ) {
QApplication app( argc, argv ); QPixmap pixmap( 200, 200 ); pixmap.fill( Qt::white ); QPainterPath path; path.addEllipse( 80, 80, 80, 80 ); path.moveTo( 120, 120 ); path.lineTo( 120, 40 ); path.arcTo( 40, 40, 160, 160, 90, 90 ); path.lineTo( 120, 120 ); QFont font = QApplication::font(); font.setPixelSize( 40 ); path.addText( 20, 180, font, "Path" ); QPainter painter( &pixmap ); painter.setRenderHint( QPainter::Antialiasing ); painter.setPen( Qt::black ); painter.setBrush( Qt::gray ); painter.drawPath( path ); pixmap.save( "path.png" ); return 0;
}
</source>
Font dialog demo
<source lang="cpp">
Chapter03\colorandfont\main.cpp /*
* Copyright (c) 2006-2007, Johan Thelin * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of APress nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */
- include <QApplication>
- include <QFontDialog>
- include <QColorDialog>
class Tester : public QWidget { public:
void doColor() { QColor color = QColorDialog::getColor(Qt::yellow, this ); if( color.isValid() ) { qDebug( "ok" ); } } void doFont() { bool ok; QFont font = QFontDialog::getFont( &ok, QFont( "Arial", 18 ), this, tr("Pick a font") ); if( ok ) { qDebug( "ok" ); } }
}; int main( int argc, char **argv ) {
QApplication app( argc, argv ); Tester t; t.doColor(); t.doFont(); return 0;
}
</source>
plain text layout
<source lang="cpp"> /****************************************************************************
- Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
- All rights reserved.
- Contact: Nokia Corporation (qt-info@nokia.com)
- This file is part of the documentation of the Qt Toolkit.
- $QT_BEGIN_LICENSE:LGPL$
- Commercial Usage
- Licensees holding valid Qt Commercial licenses may use this file in
- accordance with the Qt Commercial License Agreement provided with the
- Software or, alternatively, in accordance with the terms contained in
- a written agreement between you and Nokia.
- GNU Lesser General Public License Usage
- Alternatively, this file may be used under the terms of the GNU Lesser
- General Public License version 2.1 as published by the Free Software
- Foundation and appearing in the file LICENSE.LGPL included in the
- packaging of this file. Please review the following information to
- ensure the GNU Lesser General Public License version 2.1 requirements
- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
- In addition, as a special exception, Nokia gives you certain additional
- rights. These rights are described in the Nokia Qt LGPL Exception
- version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
- GNU General Public License Usage
- Alternatively, this file may be used under the terms of the GNU
- General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
- met: http://www.gnu.org/copyleft/gpl.html.
- If you have questions regarding the use of this file, please contact
- Nokia at qt-info@nokia.com.
- $QT_END_LICENSE$
-
- /
- ifndef WINDOW_H
- define WINDOW_H
- include <QWidget>
class Window : public QWidget {
Q_OBJECT
public:
Window(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent *event);
private:
QFont font; QString text;
};
- endif
- include <QtGui>
- include <math.h>
- include "window.h"
Window::Window(QWidget *parent)
: QWidget(parent)
{
text = QString("Support for text rendering and layout in Qt 4 has been " "redesigned around a system that allows textual content to " "be represented in a more flexible way than was possible " "with Qt 3. Qt 4 also provides a more convenient " "programming interface for editing documents. These " "improvements are made available through a reimplementation " "of the existing text rendering engine, and the " "introduction of several new classes. " "See the relevant module overview for a detailed discussion " "of this framework. The following sections provide a brief " "overview of the main concepts behind Scribe."); setWindowTitle(tr("Plain Text Layout"));
} void Window::paintEvent(QPaintEvent *event) {
QTextLayout textLayout(text, font); qreal margin = 10; qreal radius = qMin(width()/2.0, height()/2.0) - margin; QFontMetrics fm(font); qreal lineHeight = fm.height(); qreal y = 0; textLayout.beginLayout(); while (1) { // create a new line QTextLine line = textLayout.createLine(); if (!line.isValid()) break; qreal x1 = qMax(0.0, pow(pow(radius,2)-pow(radius-y,2), 0.5)); qreal x2 = qMax(0.0, pow(pow(radius,2)-pow(radius-(y+lineHeight),2), 0.5)); qreal x = qMax(x1, x2) + margin; qreal lineWidth = (width() - margin) - x; line.setLineWidth(lineWidth); line.setPosition(QPointF(x, margin+y)); y += line.height(); } textLayout.endLayout(); QPainter painter; painter.begin(this); painter.setRenderHint(QPainter::Antialiasing); painter.fillRect(rect(), Qt::white); painter.setBrush(QBrush(Qt::black)); painter.setPen(QPen(Qt::black)); textLayout.draw(&painter, QPoint(0,0)); painter.setBrush(QBrush(QColor("#a6ce39"))); painter.setPen(QPen(Qt::black)); painter.drawEllipse(QRectF(-radius, margin, 2*radius, 2*radius)); painter.end();
}
- include <QtGui>
- include "window.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv); Window *window = new Window; window->resize(337, 343); window->show(); return app.exec();
}
</source>
QFontDatabase and QTreeWidget
<source lang="cpp"> /****************************************************************************
- Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
- All rights reserved.
- Contact: Nokia Corporation (qt-info@nokia.com)
- This file is part of the documentation of the Qt Toolkit.
- $QT_BEGIN_LICENSE:LGPL$
- Commercial Usage
- Licensees holding valid Qt Commercial licenses may use this file in
- accordance with the Qt Commercial License Agreement provided with the
- Software or, alternatively, in accordance with the terms contained in
- a written agreement between you and Nokia.
- GNU Lesser General Public License Usage
- Alternatively, this file may be used under the terms of the GNU Lesser
- General Public License version 2.1 as published by the Free Software
- Foundation and appearing in the file LICENSE.LGPL included in the
- packaging of this file. Please review the following information to
- ensure the GNU Lesser General Public License version 2.1 requirements
- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
- In addition, as a special exception, Nokia gives you certain additional
- rights. These rights are described in the Nokia Qt LGPL Exception
- version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
- GNU General Public License Usage
- Alternatively, this file may be used under the terms of the GNU
- General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
- met: http://www.gnu.org/copyleft/gpl.html.
- If you have questions regarding the use of this file, please contact
- Nokia at qt-info@nokia.com.
- $QT_END_LICENSE$
-
- /
- include <QtGui>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QFontDatabase database; QTreeWidget fontTree; fontTree.setColumnCount(2); fontTree.setHeaderLabels(QStringList() << "Font" << "Smooth Sizes"); foreach (QString family, database.families()) { QTreeWidgetItem *familyItem = new QTreeWidgetItem(&fontTree); familyItem->setText(0, family); foreach (QString style, database.styles(family)) { QTreeWidgetItem *styleItem = new QTreeWidgetItem(familyItem); styleItem->setText(0, style); QString sizes; foreach (int points, database.smoothSizes(family, style)) sizes += QString::number(points) + " "; styleItem->setText(1, sizes.trimmed()); } }
fontTree.resizeColumnToContents(0); fontTree.show(); return app.exec();
}