(C++) QGraphicsSimpleTextItemExample2
February 24, 2017 · View on GitHub
(C++) QGraphicsSimpleTextItemExample2



QGraphicsSimpleTextItem example 2: coordinat display is a QGraphicsSimpleTextItem example that displays multiple QGraphicsSimpleTextItems with their coordinats as text. These items are movable and selectable.
- View a screenshot of 'QGraphicsSimpleTextItemExample2' (png)
Download the Qt Creator project
'QGraphicsSimpleTextItemExample2' (zip)
Download a Windows executable of
'QGraphicsSimpleTextItemExample2' (zip)
Technical facts
Operating system(s) or programming environment(s)
Lubuntu 15.04 (vivid)
Qt Creator 3.1.1
- G++ 4.9.2
Libraries used:
Qt project file: ./CppQGraphicsSimpleTextItemExample2/CppQGraphicsSimpleTextItemExample2.pro
exists(../../DesktopApplication.pri) { include(../../DesktopApplication.pri) } !exists(../../DesktopApplication.pri) { QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets win32 { greaterThan(QT_MAJOR_VERSION, 4): QT += svg } TEMPLATE = app CONFIG(debug, debug|release) { message(Debug mode) } CONFIG(release, debug|release) { message(Release mode) DEFINES += NDEBUG NTRACE_BILDERBIKKEL } QMAKE_CXXFLAGS += -std=c++1y -Wall -Wextra -Weffc++ unix { QMAKE_CXXFLAGS += -Werror } } exists(../../Libraries/Boost.pri) { include(../../Libraries/Boost.pri) } !exists(../../Libraries/Boost.pri) { INCLUDEPATH += \ ../../Libraries/boost_1_55_0 } SOURCES += \ qtmain.cpp \ qtwidget.cpp \ qttextitem.cpp HEADERS += \ qtwidget.h \ qttextitem.h
./CppQGraphicsSimpleTextItemExample2/qtmain.cpp
#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #include <QApplication> #include <QDesktopWidget> #include "qtwidget.h" #pragma GCC diagnostic pop int main(int argc, char *argv[]) { QApplication a(argc, argv); QtWidget w; { //Resize the dialog and put it in the screen center w.setGeometry(0,0,600,400); const QRect screen = QApplication::desktop()->screenGeometry(); w.move( screen.center() - w.rect().center() ); } w.show(); return a.exec(); }
./CppQGraphicsSimpleTextItemExample2/qttextitem.h
#ifndef QTTEXTITEM_H #define QTTEXTITEM_H #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #include <QGraphicsSimpleTextItem> #pragma GCC diagnostic pop struct QtTextItem : public QGraphicsSimpleTextItem { QtTextItem(QGraphicsItem *parent = 0); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); }; #endif // QTTEXTITEM_H
./CppQGraphicsSimpleTextItemExample2/qttextitem.cpp
#include "qttextitem.h" #include <sstream> QtTextItem::QtTextItem(QGraphicsItem *parent) : QGraphicsSimpleTextItem(parent) { this->setFlags( QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable); } void QtTextItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { std::stringstream s; s << "(" << static_cast<int>(this->pos().x()) << "," << static_cast<int>(this->pos().y()) << ")"; this->setText(s.str().c_str()); QGraphicsSimpleTextItem::paint(painter,option,widget); }
./CppQGraphicsSimpleTextItemExample2/qtwidget.h
#ifndef QTWIDGET_H #define QTWIDGET_H #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #include <QGraphicsView> #pragma GCC diagnostic pop ///The widget holding the items struct QtWidget : public QGraphicsView { QtWidget(QWidget *parent = 0); }; #endif // QTWIDGET_H
./CppQGraphicsSimpleTextItemExample2/qtwidget.cpp
#include "qtwidget.h" #include <cassert> #include <cmath> #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" #pragma GCC diagnostic ignored "-Wunused-local-typedefs" #include <boost/math/constants/constants.hpp> #include <QGraphicsScene> #include "qttextitem.h" #pragma GCC diagnostic pop QtWidget::QtWidget(QWidget *parent) : QGraphicsView(new QGraphicsScene,parent) { const int n_items = 16; for (int i=0; i!=n_items; ++i) { const double angle = boost::math::constants::two_pi<double>() * (static_cast<double>(i+0) / static_cast<double>(n_items)); const double ray = 150.0; const double x = std::sin(angle) * ray; const double y = -std::cos(angle) * ray; QtTextItem * const item = new QtTextItem; item->setPos(x,y); scene()->addItem(item); } }