A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FQt%2FQTabletEvent</id>
		<title>C++/Qt/QTabletEvent - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FQt%2FQTabletEvent"/>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTabletEvent&amp;action=history"/>
		<updated>2026-04-18T19:18:07Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTabletEvent&amp;diff=1030&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTabletEvent&amp;diff=1030&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTabletEvent&amp;diff=1031&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://www.cppe.ru/index.php?title=C%2B%2B/Qt/QTabletEvent&amp;diff=1031&amp;oldid=prev"/>
				<updated>2010-05-25T10:24:37Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Tablet widget==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;  &lt;br /&gt;
/****************************************************************************&lt;br /&gt;
**&lt;br /&gt;
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).&lt;br /&gt;
** All rights reserved.&lt;br /&gt;
** Contact: Nokia Corporation (qt-info@nokia.com)&lt;br /&gt;
**&lt;br /&gt;
** This file is part of the examples of the Qt Toolkit.&lt;br /&gt;
**&lt;br /&gt;
** $QT_BEGIN_LICENSE:LGPL$&lt;br /&gt;
** Commercial Usage&lt;br /&gt;
** Licensees holding valid Qt Commercial licenses may use this file in&lt;br /&gt;
** accordance with the Qt Commercial License Agreement provided with the&lt;br /&gt;
** Software or, alternatively, in accordance with the terms contained in&lt;br /&gt;
** a written agreement between you and Nokia.&lt;br /&gt;
**&lt;br /&gt;
** GNU Lesser General Public License Usage&lt;br /&gt;
** Alternatively, this file may be used under the terms of the GNU Lesser&lt;br /&gt;
** General Public License version 2.1 as published by the Free Software&lt;br /&gt;
** Foundation and appearing in the file LICENSE.LGPL included in the&lt;br /&gt;
** packaging of this file.  Please review the following information to&lt;br /&gt;
** ensure the GNU Lesser General Public License version 2.1 requirements&lt;br /&gt;
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.&lt;br /&gt;
**&lt;br /&gt;
** In addition, as a special exception, Nokia gives you certain additional&lt;br /&gt;
** rights.  These rights are described in the Nokia Qt LGPL Exception&lt;br /&gt;
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.&lt;br /&gt;
**&lt;br /&gt;
** GNU General Public License Usage&lt;br /&gt;
** Alternatively, this file may be used under the terms of the GNU&lt;br /&gt;
** General Public License version 3.0 as published by the Free Software&lt;br /&gt;
** Foundation and appearing in the file LICENSE.GPL included in the&lt;br /&gt;
** packaging of this file.  Please review the following information to&lt;br /&gt;
** ensure the GNU General Public License version 3.0 requirements will be&lt;br /&gt;
** met: http://www.gnu.org/copyleft/gpl.html.&lt;br /&gt;
**&lt;br /&gt;
** If you have questions regarding the use of this file, please contact&lt;br /&gt;
** Nokia at qt-info@nokia.com.&lt;br /&gt;
** $QT_END_LICENSE$&lt;br /&gt;
**&lt;br /&gt;
****************************************************************************/&lt;br /&gt;
#ifndef TABLETCANVAS_H&lt;br /&gt;
#define TABLETCANVAS_H&lt;br /&gt;
#include &amp;lt;QWidget&amp;gt;&lt;br /&gt;
#include &amp;lt;QImage&amp;gt;&lt;br /&gt;
#include &amp;lt;QPoint&amp;gt;&lt;br /&gt;
#include &amp;lt;QTabletEvent&amp;gt;&lt;br /&gt;
#include &amp;lt;QColor&amp;gt;&lt;br /&gt;
#include &amp;lt;QBrush&amp;gt;&lt;br /&gt;
#include &amp;lt;QPen&amp;gt;&lt;br /&gt;
#include &amp;lt;QPoint&amp;gt;&lt;br /&gt;
QT_BEGIN_NAMESPACE&lt;br /&gt;
class QPaintEvent;&lt;br /&gt;
class QString;&lt;br /&gt;
QT_END_NAMESPACE&lt;br /&gt;
&lt;br /&gt;
class TabletCanvas : public QWidget&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
    enum AlphaChannelType { AlphaPressure, AlphaTilt, NoAlpha };&lt;br /&gt;
    enum ColorSaturationType { SaturationVTilt, SaturationHTilt,&lt;br /&gt;
                               SaturationPressure, NoSaturation };&lt;br /&gt;
    enum LineWidthType { LineWidthPressure, LineWidthTilt, NoLineWidth };&lt;br /&gt;
    TabletCanvas();&lt;br /&gt;
    bool saveImage(const QString &amp;amp;file);&lt;br /&gt;
    bool loadImage(const QString &amp;amp;file);&lt;br /&gt;
    void setAlphaChannelType(AlphaChannelType type)&lt;br /&gt;
        { alphaChannelType = type; }&lt;br /&gt;
    void setColorSaturationType(ColorSaturationType type)&lt;br /&gt;
        { colorSaturationType = type; }&lt;br /&gt;
    void setLineWidthType(LineWidthType type)&lt;br /&gt;
        { lineWidthType = type; }&lt;br /&gt;
    void setColor(const QColor &amp;amp;color)&lt;br /&gt;
        { myColor = color; }&lt;br /&gt;
    QColor color() const&lt;br /&gt;
        { return myColor; }&lt;br /&gt;
    void setTabletDevice(QTabletEvent::TabletDevice device)&lt;br /&gt;
        { myTabletDevice = device; }&lt;br /&gt;
    int maximum(int a, int b)&lt;br /&gt;
        { return a &amp;gt; b ? a : b; }&lt;br /&gt;
protected:&lt;br /&gt;
    void tabletEvent(QTabletEvent *event);&lt;br /&gt;
    void paintEvent(QPaintEvent *event);&lt;br /&gt;
    void resizeEvent(QResizeEvent *event);&lt;br /&gt;
private:&lt;br /&gt;
    void initImage();&lt;br /&gt;
    void paintImage(QPainter &amp;amp;painter, QTabletEvent *event);&lt;br /&gt;
    Qt::BrushStyle brushPattern(qreal value);&lt;br /&gt;
    void updateBrush(QTabletEvent *event);&lt;br /&gt;
    AlphaChannelType alphaChannelType;&lt;br /&gt;
    ColorSaturationType colorSaturationType;&lt;br /&gt;
    LineWidthType lineWidthType;&lt;br /&gt;
    QTabletEvent::PointerType pointerType;&lt;br /&gt;
    QTabletEvent::TabletDevice myTabletDevice;&lt;br /&gt;
    QColor myColor;&lt;br /&gt;
    QImage image;&lt;br /&gt;
    QBrush myBrush;&lt;br /&gt;
    QPen myPen;&lt;br /&gt;
    bool deviceDown;&lt;br /&gt;
    QPoint polyLine[3];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;quot;tabletcanvas.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TabletCanvas::TabletCanvas()&lt;br /&gt;
{&lt;br /&gt;
    resize(500, 500);&lt;br /&gt;
    myBrush = QBrush();&lt;br /&gt;
    myPen = QPen();&lt;br /&gt;
    initImage();&lt;br /&gt;
    setAutoFillBackground(true);&lt;br /&gt;
    deviceDown = false;&lt;br /&gt;
    myColor = Qt::red;&lt;br /&gt;
    myTabletDevice = QTabletEvent::Stylus;&lt;br /&gt;
    alphaChannelType = NoAlpha;&lt;br /&gt;
    colorSaturationType = NoSaturation;&lt;br /&gt;
    lineWidthType = LineWidthPressure;&lt;br /&gt;
}&lt;br /&gt;
void TabletCanvas::initImage()&lt;br /&gt;
{&lt;br /&gt;
    QImage newImage = QImage(width(), height(), QImage::Format_ARGB32);&lt;br /&gt;
    QPainter painter(&amp;amp;newImage);&lt;br /&gt;
    painter.fillRect(0, 0, newImage.width(), newImage.height(), Qt::white);&lt;br /&gt;
    if (!image.isNull())&lt;br /&gt;
        painter.drawImage(0, 0, image);&lt;br /&gt;
    painter.end();&lt;br /&gt;
    image = newImage;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool TabletCanvas::saveImage(const QString &amp;amp;file)&lt;br /&gt;
{&lt;br /&gt;
    return image.save(file);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool TabletCanvas::loadImage(const QString &amp;amp;file)&lt;br /&gt;
{&lt;br /&gt;
    bool success = image.load(file);&lt;br /&gt;
    if (success) {&lt;br /&gt;
        update();&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TabletCanvas::tabletEvent(QTabletEvent *event)&lt;br /&gt;
{&lt;br /&gt;
    switch (event-&amp;gt;type()) {&lt;br /&gt;
        case QEvent::TabletPress:&lt;br /&gt;
            if (!deviceDown)&lt;br /&gt;
                deviceDown = true;&lt;br /&gt;
            break;&lt;br /&gt;
        case QEvent::TabletRelease:&lt;br /&gt;
            if (deviceDown)&lt;br /&gt;
                deviceDown = false;&lt;br /&gt;
            break;&lt;br /&gt;
        case QEvent::TabletMove:&lt;br /&gt;
            polyLine[2] = polyLine[1];&lt;br /&gt;
            polyLine[1] = polyLine[0];&lt;br /&gt;
            polyLine[0] = event-&amp;gt;pos();&lt;br /&gt;
            if (deviceDown) {&lt;br /&gt;
                updateBrush(event);&lt;br /&gt;
                QPainter painter(&amp;amp;image);&lt;br /&gt;
                paintImage(painter, event);&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    update();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TabletCanvas::paintEvent(QPaintEvent *)&lt;br /&gt;
{&lt;br /&gt;
    QPainter painter(this);&lt;br /&gt;
    painter.drawImage(QPoint(0, 0), image);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TabletCanvas::paintImage(QPainter &amp;amp;painter, QTabletEvent *event)&lt;br /&gt;
{&lt;br /&gt;
    QPoint brushAdjust(10, 10);&lt;br /&gt;
    switch (myTabletDevice) {&lt;br /&gt;
        case QTabletEvent::Stylus:&lt;br /&gt;
            painter.setBrush(myBrush);&lt;br /&gt;
            painter.setPen(myPen);&lt;br /&gt;
            painter.drawLine(polyLine[1], event-&amp;gt;pos());&lt;br /&gt;
            break;&lt;br /&gt;
        case QTabletEvent::Airbrush:&lt;br /&gt;
            myBrush.setColor(myColor);&lt;br /&gt;
            myBrush.setStyle(brushPattern(event-&amp;gt;pressure()));&lt;br /&gt;
            painter.setPen(Qt::NoPen);&lt;br /&gt;
            painter.setBrush(myBrush);&lt;br /&gt;
            for (int i = 0; i &amp;lt; 3; ++i) {&lt;br /&gt;
                painter.drawEllipse(QRect(polyLine[i] - brushAdjust,&lt;br /&gt;
                                    polyLine[i] + brushAdjust));&lt;br /&gt;
            }&lt;br /&gt;
            break;&lt;br /&gt;
        case QTabletEvent::Puck:&lt;br /&gt;
        case QTabletEvent::FourDMouse:&lt;br /&gt;
        case QTabletEvent::RotationStylus:&lt;br /&gt;
            qWarning(&amp;quot;This input device is not supported by the example.&amp;quot;);&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            qWarning(&amp;quot;Unknown tablet device.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Qt::BrushStyle TabletCanvas::brushPattern(qreal value)&lt;br /&gt;
{&lt;br /&gt;
    int pattern = int((value) * 100.0) % 7;&lt;br /&gt;
    switch (pattern) {&lt;br /&gt;
        case 0:&lt;br /&gt;
            return Qt::SolidPattern;&lt;br /&gt;
        case 1:&lt;br /&gt;
            return Qt::Dense1Pattern;&lt;br /&gt;
        case 2:&lt;br /&gt;
            return Qt::Dense2Pattern;&lt;br /&gt;
        case 3:&lt;br /&gt;
            return Qt::Dense3Pattern;&lt;br /&gt;
        case 4:&lt;br /&gt;
            return Qt::Dense4Pattern;&lt;br /&gt;
        case 5:&lt;br /&gt;
            return Qt::Dense5Pattern;&lt;br /&gt;
        case 6:&lt;br /&gt;
            return Qt::Dense6Pattern;&lt;br /&gt;
        default:&lt;br /&gt;
            return Qt::Dense7Pattern;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TabletCanvas::updateBrush(QTabletEvent *event)&lt;br /&gt;
{&lt;br /&gt;
    int hue, saturation, value, alpha;&lt;br /&gt;
    myColor.getHsv(&amp;amp;hue, &amp;amp;saturation, &amp;amp;value, &amp;amp;alpha);&lt;br /&gt;
    int vValue = int(((event-&amp;gt;yTilt() + 60.0) / 120.0) * 255);&lt;br /&gt;
    int hValue = int(((event-&amp;gt;xTilt() + 60.0) / 120.0) * 255);&lt;br /&gt;
 &lt;br /&gt;
    switch (alphaChannelType) {&lt;br /&gt;
        case AlphaPressure:&lt;br /&gt;
            myColor.setAlpha(int(event-&amp;gt;pressure() * 255.0));&lt;br /&gt;
            break;&lt;br /&gt;
        case AlphaTilt:&lt;br /&gt;
            myColor.setAlpha(maximum(abs(vValue - 127), abs(hValue - 127)));&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            myColor.setAlpha(255);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    switch (colorSaturationType) {&lt;br /&gt;
        case SaturationVTilt:&lt;br /&gt;
            myColor.setHsv(hue, vValue, value, alpha);&lt;br /&gt;
            break;&lt;br /&gt;
        case SaturationHTilt:&lt;br /&gt;
            myColor.setHsv(hue, hValue, value, alpha);&lt;br /&gt;
            break;&lt;br /&gt;
        case SaturationPressure:&lt;br /&gt;
            myColor.setHsv(hue, int(event-&amp;gt;pressure() * 255.0), value, alpha);&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            ;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    switch (lineWidthType) {&lt;br /&gt;
        case LineWidthPressure:&lt;br /&gt;
            myPen.setWidthF(event-&amp;gt;pressure() * 10 + 1);&lt;br /&gt;
            break;&lt;br /&gt;
        case LineWidthTilt:&lt;br /&gt;
            myPen.setWidthF(maximum(abs(vValue - 127), abs(hValue - 127)) / 12);&lt;br /&gt;
            break;&lt;br /&gt;
        default:&lt;br /&gt;
            myPen.setWidthF(1);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    if (event-&amp;gt;pointerType() == QTabletEvent::Eraser) {&lt;br /&gt;
        myBrush.setColor(Qt::white);&lt;br /&gt;
        myPen.setColor(Qt::white);&lt;br /&gt;
        myPen.setWidthF(event-&amp;gt;pressure() * 10 + 1);&lt;br /&gt;
    } else {&lt;br /&gt;
        myBrush.setColor(myColor);&lt;br /&gt;
        myPen.setColor(myColor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void TabletCanvas::resizeEvent(QResizeEvent *event)&lt;br /&gt;
{&lt;br /&gt;
    initImage();&lt;br /&gt;
    polyLine[0] = polyLine[1] = polyLine[2] = QPoint();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#ifndef TABLETAPPLICATION_H&lt;br /&gt;
#define TABLETAPPLICATION_H&lt;br /&gt;
#include &amp;lt;QApplication&amp;gt;&lt;br /&gt;
#include &amp;quot;tabletcanvas.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class TabletApplication : public QApplication&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
    TabletApplication(int &amp;amp;argv, char **args)&lt;br /&gt;
    : QApplication(argv, args) {}&lt;br /&gt;
    bool event(QEvent *event);&lt;br /&gt;
    void setCanvas(TabletCanvas *canvas)&lt;br /&gt;
        { myCanvas = canvas; }&lt;br /&gt;
private:&lt;br /&gt;
    TabletCanvas *myCanvas;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
#include &amp;quot;tabletapplication.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
bool TabletApplication::event(QEvent *event)&lt;br /&gt;
{&lt;br /&gt;
    if (event-&amp;gt;type() == QEvent::TabletEnterProximity ||&lt;br /&gt;
        event-&amp;gt;type() == QEvent::TabletLeaveProximity) {&lt;br /&gt;
        myCanvas-&amp;gt;setTabletDevice(&lt;br /&gt;
            static_cast&amp;lt;QTabletEvent *&amp;gt;(event)-&amp;gt;device());&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
    return QApplication::event(event);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#ifndef MAINWINDOW_H&lt;br /&gt;
#define MAINWINDOW_H&lt;br /&gt;
#include &amp;lt;QMainWindow&amp;gt;&lt;br /&gt;
QT_BEGIN_NAMESPACE&lt;br /&gt;
class QAction;&lt;br /&gt;
class QActionGroup;&lt;br /&gt;
class QMenu;&lt;br /&gt;
class QStatusBar;&lt;br /&gt;
QT_END_NAMESPACE&lt;br /&gt;
class TabletCanvas;&lt;br /&gt;
&lt;br /&gt;
class MainWindow : public QMainWindow&lt;br /&gt;
{&lt;br /&gt;
    Q_OBJECT&lt;br /&gt;
public:&lt;br /&gt;
    MainWindow(TabletCanvas *canvas);&lt;br /&gt;
private slots:&lt;br /&gt;
    void brushColorAct();&lt;br /&gt;
    void alphaActionTriggered(QAction *action);&lt;br /&gt;
    void lineWidthActionTriggered(QAction *action);&lt;br /&gt;
    void saturationActionTriggered(QAction *action);&lt;br /&gt;
    void saveAct();&lt;br /&gt;
    void loadAct();&lt;br /&gt;
    void aboutAct();&lt;br /&gt;
private:&lt;br /&gt;
    void createActions();&lt;br /&gt;
    void createMenus();&lt;br /&gt;
    TabletCanvas *myCanvas;&lt;br /&gt;
    QAction *brushColorAction;&lt;br /&gt;
    QActionGroup *brushActionGroup;&lt;br /&gt;
    QActionGroup *alphaChannelGroup;&lt;br /&gt;
    QAction *alphaChannelPressureAction;&lt;br /&gt;
    QAction *alphaChannelTiltAction;&lt;br /&gt;
    QAction *noAlphaChannelAction;&lt;br /&gt;
    QActionGroup *colorSaturationGroup;&lt;br /&gt;
    QAction *colorSaturationVTiltAction;&lt;br /&gt;
    QAction *colorSaturationHTiltAction;&lt;br /&gt;
    QAction *colorSaturationPressureAction;&lt;br /&gt;
    QAction *noColorSaturationAction;&lt;br /&gt;
    QActionGroup *lineWidthGroup;&lt;br /&gt;
    QAction *lineWidthPressureAction;&lt;br /&gt;
    QAction *lineWidthTiltAction;&lt;br /&gt;
    QAction *lineWidthFixedAction;&lt;br /&gt;
    QAction *exitAction;&lt;br /&gt;
    QAction *saveAction;&lt;br /&gt;
    QAction *loadAction;&lt;br /&gt;
    QAction *aboutAction;&lt;br /&gt;
    QAction *aboutQtAction;&lt;br /&gt;
    QMenu *fileMenu;&lt;br /&gt;
    QMenu *brushMenu;&lt;br /&gt;
    QMenu *tabletMenu;&lt;br /&gt;
    QMenu *helpMenu;&lt;br /&gt;
    QMenu *colorSaturationMenu;&lt;br /&gt;
    QMenu *lineWidthMenu;&lt;br /&gt;
    QMenu *alphaChannelMenu;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
#include &amp;quot;mainwindow.h&amp;quot;&lt;br /&gt;
#include &amp;quot;tabletcanvas.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MainWindow::MainWindow(TabletCanvas *canvas)&lt;br /&gt;
{&lt;br /&gt;
    myCanvas = canvas;&lt;br /&gt;
    createActions();&lt;br /&gt;
    createMenus();&lt;br /&gt;
    myCanvas-&amp;gt;setColor(Qt::red);&lt;br /&gt;
    myCanvas-&amp;gt;setLineWidthType(TabletCanvas::LineWidthPressure);&lt;br /&gt;
    myCanvas-&amp;gt;setAlphaChannelType(TabletCanvas::NoAlpha);&lt;br /&gt;
    myCanvas-&amp;gt;setColorSaturationType(TabletCanvas::NoSaturation);&lt;br /&gt;
    setWindowTitle(tr(&amp;quot;Tablet Example&amp;quot;));&lt;br /&gt;
    setCentralWidget(myCanvas);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::brushColorAct()&lt;br /&gt;
{&lt;br /&gt;
    QColor color = QColorDialog::getColor(myCanvas-&amp;gt;color());&lt;br /&gt;
    if (color.isValid())&lt;br /&gt;
        myCanvas-&amp;gt;setColor(color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::alphaActionTriggered(QAction *action)&lt;br /&gt;
{&lt;br /&gt;
    if (action == alphaChannelPressureAction) {&lt;br /&gt;
        myCanvas-&amp;gt;setAlphaChannelType(TabletCanvas::AlphaPressure);&lt;br /&gt;
    } else if (action == alphaChannelTiltAction) {&lt;br /&gt;
        myCanvas-&amp;gt;setAlphaChannelType(TabletCanvas::AlphaTilt);&lt;br /&gt;
    } else {&lt;br /&gt;
        myCanvas-&amp;gt;setAlphaChannelType(TabletCanvas::NoAlpha);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::lineWidthActionTriggered(QAction *action)&lt;br /&gt;
{&lt;br /&gt;
    if (action == lineWidthPressureAction) {&lt;br /&gt;
        myCanvas-&amp;gt;setLineWidthType(TabletCanvas::LineWidthPressure);&lt;br /&gt;
    } else if (action == lineWidthTiltAction) {&lt;br /&gt;
        myCanvas-&amp;gt;setLineWidthType(TabletCanvas::LineWidthTilt);&lt;br /&gt;
    } else {&lt;br /&gt;
        myCanvas-&amp;gt;setLineWidthType(TabletCanvas::NoLineWidth);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::saturationActionTriggered(QAction *action)&lt;br /&gt;
{&lt;br /&gt;
    if (action == colorSaturationVTiltAction) {&lt;br /&gt;
        myCanvas-&amp;gt;setColorSaturationType(TabletCanvas::SaturationVTilt);&lt;br /&gt;
    } else if (action == colorSaturationHTiltAction) {&lt;br /&gt;
        myCanvas-&amp;gt;setColorSaturationType(TabletCanvas::SaturationHTilt);&lt;br /&gt;
    } else if (action == colorSaturationPressureAction) {&lt;br /&gt;
        myCanvas-&amp;gt;setColorSaturationType(TabletCanvas::SaturationPressure);&lt;br /&gt;
    } else {&lt;br /&gt;
        myCanvas-&amp;gt;setColorSaturationType(TabletCanvas::NoSaturation);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::saveAct()&lt;br /&gt;
{&lt;br /&gt;
    QString path = QDir::currentPath() + &amp;quot;/untitled.png&amp;quot;;&lt;br /&gt;
    QString fileName = QFileDialog::getSaveFileName(this, tr(&amp;quot;Save Picture&amp;quot;),&lt;br /&gt;
                             path);&lt;br /&gt;
    if (!myCanvas-&amp;gt;saveImage(fileName))&lt;br /&gt;
        QMessageBox::information(this, &amp;quot;Error Saving Picture&amp;quot;,&lt;br /&gt;
                                 &amp;quot;Could not save the image&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::loadAct()&lt;br /&gt;
{&lt;br /&gt;
    QString fileName = QFileDialog::getOpenFileName(this, tr(&amp;quot;Open Picture&amp;quot;),&lt;br /&gt;
                                                    QDir::currentPath());&lt;br /&gt;
    if (!myCanvas-&amp;gt;loadImage(fileName))&lt;br /&gt;
        QMessageBox::information(this, &amp;quot;Error Opening Picture&amp;quot;,&lt;br /&gt;
                                 &amp;quot;Could not open picture&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::aboutAct()&lt;br /&gt;
{&lt;br /&gt;
    QMessageBox::about(this, tr(&amp;quot;About Tablet Example&amp;quot;),&lt;br /&gt;
                       tr(&amp;quot;This example shows use of a Wacom tablet in Qt&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::createActions()&lt;br /&gt;
{&lt;br /&gt;
    brushColorAction = new QAction(tr(&amp;quot;&amp;amp;Brush Color...&amp;quot;), this);&lt;br /&gt;
    brushColorAction-&amp;gt;setShortcut(tr(&amp;quot;Ctrl+C&amp;quot;));&lt;br /&gt;
    connect(brushColorAction, SIGNAL(triggered()),&lt;br /&gt;
            this, SLOT(brushColorAct()));&lt;br /&gt;
&lt;br /&gt;
    alphaChannelPressureAction = new QAction(tr(&amp;quot;&amp;amp;Pressure&amp;quot;), this);&lt;br /&gt;
    alphaChannelPressureAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    alphaChannelTiltAction = new QAction(tr(&amp;quot;&amp;amp;Tilt&amp;quot;), this);&lt;br /&gt;
    alphaChannelTiltAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    noAlphaChannelAction = new QAction(tr(&amp;quot;No Alpha Channel&amp;quot;), this);&lt;br /&gt;
    noAlphaChannelAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    noAlphaChannelAction-&amp;gt;setChecked(true);&lt;br /&gt;
    alphaChannelGroup = new QActionGroup(this);&lt;br /&gt;
    alphaChannelGroup-&amp;gt;addAction(alphaChannelPressureAction);&lt;br /&gt;
    alphaChannelGroup-&amp;gt;addAction(alphaChannelTiltAction);&lt;br /&gt;
    alphaChannelGroup-&amp;gt;addAction(noAlphaChannelAction);&lt;br /&gt;
    connect(alphaChannelGroup, SIGNAL(triggered(QAction *)),&lt;br /&gt;
            this, SLOT(alphaActionTriggered(QAction *)));&lt;br /&gt;
&lt;br /&gt;
    colorSaturationVTiltAction = new QAction(tr(&amp;quot;&amp;amp;Vertical Tilt&amp;quot;), this);&lt;br /&gt;
    colorSaturationVTiltAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    colorSaturationHTiltAction = new QAction(tr(&amp;quot;&amp;amp;Horizontal Tilt&amp;quot;), this);&lt;br /&gt;
    colorSaturationHTiltAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    colorSaturationPressureAction = new QAction(tr(&amp;quot;&amp;amp;Pressure&amp;quot;), this);&lt;br /&gt;
    colorSaturationPressureAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    noColorSaturationAction = new QAction(tr(&amp;quot;&amp;amp;No Color Saturation&amp;quot;), this);&lt;br /&gt;
    noColorSaturationAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    noColorSaturationAction-&amp;gt;setChecked(true);&lt;br /&gt;
    colorSaturationGroup = new QActionGroup(this);&lt;br /&gt;
    colorSaturationGroup-&amp;gt;addAction(colorSaturationVTiltAction);&lt;br /&gt;
    colorSaturationGroup-&amp;gt;addAction(colorSaturationHTiltAction);&lt;br /&gt;
    colorSaturationGroup-&amp;gt;addAction(colorSaturationPressureAction);&lt;br /&gt;
    colorSaturationGroup-&amp;gt;addAction(noColorSaturationAction);&lt;br /&gt;
    connect(colorSaturationGroup, SIGNAL(triggered(QAction *)),&lt;br /&gt;
            this, SLOT(saturationActionTriggered(QAction *)));&lt;br /&gt;
    lineWidthPressureAction = new QAction(tr(&amp;quot;&amp;amp;Pressure&amp;quot;), this);&lt;br /&gt;
    lineWidthPressureAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    lineWidthPressureAction-&amp;gt;setChecked(true);&lt;br /&gt;
    lineWidthTiltAction = new QAction(tr(&amp;quot;&amp;amp;Tilt&amp;quot;), this);&lt;br /&gt;
    lineWidthTiltAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    lineWidthFixedAction = new QAction(tr(&amp;quot;&amp;amp;Fixed&amp;quot;), this);&lt;br /&gt;
    lineWidthFixedAction-&amp;gt;setCheckable(true);&lt;br /&gt;
    lineWidthGroup = new QActionGroup(this);&lt;br /&gt;
    lineWidthGroup-&amp;gt;addAction(lineWidthPressureAction);&lt;br /&gt;
    lineWidthGroup-&amp;gt;addAction(lineWidthTiltAction);&lt;br /&gt;
    lineWidthGroup-&amp;gt;addAction(lineWidthFixedAction);&lt;br /&gt;
    connect(lineWidthGroup, SIGNAL(triggered(QAction *)),&lt;br /&gt;
            this, SLOT(lineWidthActionTriggered(QAction *)));&lt;br /&gt;
    exitAction = new QAction(tr(&amp;quot;E&amp;amp;xit&amp;quot;), this);&lt;br /&gt;
    exitAction-&amp;gt;setShortcut(tr(&amp;quot;Ctrl+X&amp;quot;));&lt;br /&gt;
    connect(exitAction, SIGNAL(triggered()),&lt;br /&gt;
            this, SLOT(close()));&lt;br /&gt;
    loadAction = new QAction(tr(&amp;quot;&amp;amp;Open...&amp;quot;), this);&lt;br /&gt;
    loadAction-&amp;gt;setShortcut(tr(&amp;quot;Ctrl+O&amp;quot;));&lt;br /&gt;
    connect(loadAction, SIGNAL(triggered()),&lt;br /&gt;
            this, SLOT(loadAct()));&lt;br /&gt;
    saveAction = new QAction(tr(&amp;quot;&amp;amp;Save As...&amp;quot;), this);&lt;br /&gt;
    saveAction-&amp;gt;setShortcut(tr(&amp;quot;Ctrl+S&amp;quot;));&lt;br /&gt;
    connect(saveAction, SIGNAL(triggered()),&lt;br /&gt;
            this, SLOT(saveAct()));&lt;br /&gt;
    aboutAction = new QAction(tr(&amp;quot;A&amp;amp;bout&amp;quot;), this);&lt;br /&gt;
    aboutAction-&amp;gt;setShortcut(tr(&amp;quot;Ctrl+B&amp;quot;));&lt;br /&gt;
    connect(aboutAction, SIGNAL(triggered()),&lt;br /&gt;
            this, SLOT(aboutAct()));&lt;br /&gt;
    aboutQtAction = new QAction(tr(&amp;quot;About &amp;amp;Qt&amp;quot;), this);&lt;br /&gt;
    aboutQtAction-&amp;gt;setShortcut(tr(&amp;quot;Ctrl+Q&amp;quot;));&lt;br /&gt;
    connect(aboutQtAction, SIGNAL(triggered()),&lt;br /&gt;
            qApp, SLOT(aboutQt()));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void MainWindow::createMenus()&lt;br /&gt;
{&lt;br /&gt;
    fileMenu = menuBar()-&amp;gt;addMenu(tr(&amp;quot;&amp;amp;File&amp;quot;));&lt;br /&gt;
    fileMenu-&amp;gt;addAction(loadAction);&lt;br /&gt;
    fileMenu-&amp;gt;addAction(saveAction);&lt;br /&gt;
    fileMenu-&amp;gt;addSeparator();&lt;br /&gt;
    fileMenu-&amp;gt;addAction(exitAction);&lt;br /&gt;
    brushMenu = menuBar()-&amp;gt;addMenu(tr(&amp;quot;&amp;amp;Brush&amp;quot;));&lt;br /&gt;
    brushMenu-&amp;gt;addAction(brushColorAction);&lt;br /&gt;
    tabletMenu = menuBar()-&amp;gt;addMenu(tr(&amp;quot;&amp;amp;Tablet&amp;quot;));&lt;br /&gt;
    lineWidthMenu = tabletMenu-&amp;gt;addMenu(tr(&amp;quot;&amp;amp;Line Width&amp;quot;));&lt;br /&gt;
    lineWidthMenu-&amp;gt;addAction(lineWidthPressureAction);&lt;br /&gt;
    lineWidthMenu-&amp;gt;addAction(lineWidthTiltAction);&lt;br /&gt;
    lineWidthMenu-&amp;gt;addAction(lineWidthFixedAction);&lt;br /&gt;
    alphaChannelMenu = tabletMenu-&amp;gt;addMenu(tr(&amp;quot;&amp;amp;Alpha Channel&amp;quot;));&lt;br /&gt;
    alphaChannelMenu-&amp;gt;addAction(alphaChannelPressureAction);&lt;br /&gt;
    alphaChannelMenu-&amp;gt;addAction(alphaChannelTiltAction);&lt;br /&gt;
    alphaChannelMenu-&amp;gt;addAction(noAlphaChannelAction);&lt;br /&gt;
    colorSaturationMenu = tabletMenu-&amp;gt;addMenu(tr(&amp;quot;&amp;amp;Color Saturation&amp;quot;));&lt;br /&gt;
    colorSaturationMenu-&amp;gt;addAction(colorSaturationVTiltAction);&lt;br /&gt;
    colorSaturationMenu-&amp;gt;addAction(colorSaturationHTiltAction);&lt;br /&gt;
    colorSaturationMenu-&amp;gt;addAction(noColorSaturationAction);&lt;br /&gt;
    helpMenu = menuBar()-&amp;gt;addMenu(&amp;quot;&amp;amp;Help&amp;quot;);&lt;br /&gt;
    helpMenu-&amp;gt;addAction(aboutAction);&lt;br /&gt;
    helpMenu-&amp;gt;addAction(aboutQtAction);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;
#include &amp;quot;mainwindow.h&amp;quot;&lt;br /&gt;
#include &amp;quot;tabletapplication.h&amp;quot;&lt;br /&gt;
#include &amp;quot;tabletcanvas.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argv, char *args[])&lt;br /&gt;
{&lt;br /&gt;
    TabletApplication app(argv, args);&lt;br /&gt;
    TabletCanvas *canvas = new TabletCanvas;&lt;br /&gt;
    app.setCanvas(canvas);&lt;br /&gt;
    MainWindow mainWindow(canvas);&lt;br /&gt;
    mainWindow.resize(500, 500);&lt;br /&gt;
    mainWindow.show();&lt;br /&gt;
    return app.exec();&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>