Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) Qt example 25

 

 

 

 

 

 

Technical facts

 

Application type(s)

Operating system(s) or programming environment(s)

IDE(s):

Project type:

C++ standard:

Compiler(s):

Libraries used:

 

 

 

 

 

Qt project file: CppQtExample25.pro

 

#-------------------------------------------------
#
# Project created by QtCreator 2011-02-08T16:21:42
#
#-------------------------------------------------
QT       += core gui
TARGET = CppQtExample25
TEMPLATE = app
SOURCES += main.cpp \
  sketchwidget.cpp \
  transparentsketchdialog.cpp
HEADERS  += \
  sketchwidget.h \
  transparentsketchdialog.h
FORMS    += \
  transparentsketchdialog.ui
CONFIG += mobility
MOBILITY =

symbian {
    TARGET.UID3 = 0xeaa0000d
    # TARGET.CAPABILITY +=
    TARGET.EPOCSTACKSIZE = 0x14000
    TARGET.EPOCHEAPSIZE = 0x020000 0x800000
}

 

 

 

 

 

main.cpp

 

#include <QtGui/QApplication>
#include "transparentsketchdialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    TransparentSketchDialog w;
#if defined(Q_WS_S60)
    w.showMaximized();
#else
    w.show();
#endif

    return a.exec();
}

 

 

 

 

 

sketchwidget.cpp

 

//---------------------------------------------------------------------------
#include <cassert>
//---------------------------------------------------------------------------
#include <QMouseEvent>
#include <QPainter>
#include "sketchwidget.h"
//---------------------------------------------------------------------------
SketchWidget::SketchWidget(QWidget *parent)
  : QWidget(parent)
{
  this->setMouseTracking(true);
}
//---------------------------------------------------------------------------
void SketchWidget::clear()
{
  m_points.clear();
  this->repaint();
}
//---------------------------------------------------------------------------
void SketchWidget::mouseMoveEvent(QMouseEvent * e)
{
  if (e->buttons() & Qt::LeftButton)
  {
    m_points.back().push_back(e->pos());
    this->repaint();
  }
}
//---------------------------------------------------------------------------
void SketchWidget::mousePressEvent(QMouseEvent * e)
{
  if (e->buttons() & Qt::LeftButton)
  {
    m_points.push_back(std::vector<QPoint>());
    m_points.back().push_back(e->pos());
  }
}
//---------------------------------------------------------------------------
void SketchWidget::paintEvent(QPaintEvent *)
{
  QPainter painter(this);
  {
    QPen pen = painter.pen();
    pen.setCapStyle(Qt::RoundCap);
    pen.setWidth(10);
    painter.setPen(pen);
  }

  const int n_lines = static_cast<int>(m_points.size());
  for (int line=0; line!=n_lines; ++line)
  {
    const std::vector<QPoint>& points = m_points[line];
    const int n_points = static_cast<int>(points.size());
    for (int point=1; point!=n_points; ++point)
    {
      painter.drawLine(points[point-1],points[point]);
    }
  }
}
//---------------------------------------------------------------------------


 

 

 

 

 

sketchwidget.h

 

#ifndef SKETCHWIDGET_H
#define SKETCHWIDGET_H
//---------------------------------------------------------------------------
#include <vector>
//---------------------------------------------------------------------------
#include <QWidget>
//---------------------------------------------------------------------------
class SketchWidget : public QWidget
{
  Q_OBJECT
public:
  explicit SketchWidget(QWidget *parent = 0);
  void clear();
  virtual ~SketchWidget() {}

protected:
  virtual void mouseMoveEvent(QMouseEvent *);
  virtual void mousePressEvent(QMouseEvent *);
  virtual void paintEvent(QPaintEvent *);

private:
  std::vector<std::vector<QPoint> > m_points;

signals:

public slots:

};
//---------------------------------------------------------------------------
#endif // SKETCHWIDGET_H

 

 

 

 

 

transparentsketchdialog.cpp

 

#include <QDesktopWidget>
#include <QPainter>
#include <QPixmap>
#include "transparentsketchdialog.h"
#include "ui_transparentsketchdialog.h"

TransparentSketchDialog::TransparentSketchDialog(QWidget *parent)
  : QDialog(parent),
    ui(new Ui::TransparentSketchDialog),
    m_pixmap(QPixmap::grabWindow(QApplication::desktop()->winId()))
{
  ui->setupUi(this);
}

TransparentSketchDialog::~TransparentSketchDialog()
{
  delete ui;
}

void TransparentSketchDialog::changeEvent(QEvent *e)
{
  QDialog::changeEvent(e);
  switch (e->type()) {
  case QEvent::LanguageChange:
    ui->retranslateUi(this);
    break;
  default:
    break;
  }
}

void TransparentSketchDialog::paintEvent(QPaintEvent *)
{
  QPainter painter(this);
  painter.drawPixmap(
    this->rect(),
    m_pixmap,
    this->geometry());
}



 

 

 

 

 

transparentsketchdialog.h

 

#ifndef TRANSPARENTSKETCHDIALOG_H
#define TRANSPARENTSKETCHDIALOG_H

#include <QDialog>

namespace Ui {
  class TransparentSketchDialog;
}

class TransparentSketchDialog : public QDialog
{
  Q_OBJECT

public:
  explicit TransparentSketchDialog(QWidget *parent = 0);
  ~TransparentSketchDialog();

protected:
  void changeEvent(QEvent *e);
  void paintEvent(QPaintEvent *);

private:
  Ui::TransparentSketchDialog *ui;
  QPixmap m_pixmap;
};

#endif // TRANSPARENTSKETCHDIALOG_H

 

 

 

 

 

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict