#include <qapplication.h>
#include <qmainwindow.h>
#include <qgraphicsview.h>
#include <qgraphicsscene.h>
#include <qgraphicsitem.h>
#include <QWheelEvent>
#include <QtOpenGL>
#include <qmath.h>
#include <qcolor.h>
using namespace std;
{
public:
BaseTile(int i);
private:
};
{
public:
private:
};
/////////////////////
BaseTile::BaseTile(int i)
{
base_char = alpha.at(i);
color = tile_colors[i];
}
{
Q_UNUSED(widget);
const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());
if (lod < 0.5) {
painter
->fillRect
(QRectF(0,
0,
20,
20), color
);
return;
}
painter
->fillRect
(QRectF(0,
0,
20,
20), color
);
painter
->setFont
(QFont("Times",
10));
painter
->setPen
(QColor("black"));
painter
->drawText
(0,
0,
20,
20,0x0084,
QString(base_char
));
}
/////////////////////
{
if ( e->modifiers() == Qt::ControlModifier )
{
int numSteps = ( e->delta() / 8 ) / 15;
QMatrix mat
= graphicsView
->matrix
();
if ( numSteps > 0 )
mat.scale( numSteps * 1.2, numSteps * 1.2 );
else
mat.scale( -1 / ( numSteps * 1.2 ), -1 / ( numSteps * 1.2 ) );
graphicsView->setMatrix(mat);
e->accept();
}
}
MainWindow
::MainWindow(QWidget *parent
) :{
// generate random data to display
//
vector< vector<int> > data;
int seq_length = 5000;
int num_seq = 80;
vector<int> seq0;
for(int j=0;j<seq_length;j++)
{
seq0.push_back( int(rand()/float(RAND_MAX)*4) );
}
data.push_back(seq0);
for(int i=1;i<num_seq;i++)
{
vector<int> seq_i;
for(int j=0;j<seq_length;j++)
{
if(rand()/float(RAND_MAX)*20 < 1)
seq_i.push_back( int(rand()/float(RAND_MAX)*4) );
else
seq_i.push_back( data.at(0).at(j) );
}
data.push_back(seq_i);
}
// the browser stuff
//
int y_pos = 0;
for (int i = 0; i < num_seq; i++)
{
int x_pos = 0;
for (int j = 0; j < seq_length; j++)
{
int base = data.at(i).at(j);
BaseTile *item = new BaseTile(base);
item
->setPos
(QPointF(x_pos, y_pos
));
scene->addItem(item);
x_pos += 20;
}
y_pos += 20;
}
graphicsView
->setRenderHint
(QPainter::Antialiasing,
false);
graphicsView
->setOptimizationFlags
(QGraphicsView::DontSavePainterState);
graphicsView
->setViewportUpdateMode
(QGraphicsView::SmartViewportUpdate);
graphicsView
->setTransformationAnchor
(QGraphicsView::AnchorUnderMouse);
graphicsView->setScene(scene);
graphicsView
->setGeometry
(QRect(50,
50,
100,
100));
graphicsView->show();
this->setCentralWidget(graphicsView);
}
/////////////////////
int main(int argc, char *argv[])
{
MainWindow w;
w.show();
return a.exec();
}
/////////////////////
/*
g++ -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4 -L/usr/lib -lQtOpenGL -lQtGui -lQtCore -lGLU -lGL -lpthread test.cpp -o test
*/
#include <qapplication.h>
#include <qmainwindow.h>
#include <qgraphicsview.h>
#include <qgraphicsscene.h>
#include <qgraphicsitem.h>
#include <QWheelEvent>
#include <QtOpenGL>
#include <qmath.h>
#include <qcolor.h>
using namespace std;
class BaseTile : public QGraphicsItem
{
public:
BaseTile(int i);
QRectF boundingRect() const{ return QRectF(0, 0, 20, 20); }
void paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget);
private:
QColor color;
QChar base_char;
};
class MainWindow : public QMainWindow
{
public:
MainWindow(QWidget *parent = 0);
private:
void wheelEvent(QWheelEvent * event);
QGraphicsScene *scene;
QGraphicsView *graphicsView;
};
/////////////////////
BaseTile::BaseTile(int i)
{
QString alpha = "ACGT";
QColor tile_colors[] = { QColor("blue"), QColor("green"), QColor("yellow"), QColor("red") };
base_char = alpha.at(i);
color = tile_colors[i];
}
void BaseTile::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget);
const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());
if (lod < 0.5) {
painter->fillRect(QRectF(0, 0, 20, 20), color);
return;
}
QBrush b = painter->brush();
painter->fillRect(QRectF(0, 0, 20, 20), color);
painter->setFont(QFont("Times",10));
painter->setPen(QColor("black"));
painter->drawText(0, 0, 20, 20,0x0084, QString(base_char));
}
/////////////////////
void MainWindow::wheelEvent(QWheelEvent * e)
{
if ( e->modifiers() == Qt::ControlModifier )
{
int numSteps = ( e->delta() / 8 ) / 15;
QMatrix mat = graphicsView->matrix();
if ( numSteps > 0 )
mat.scale( numSteps * 1.2, numSteps * 1.2 );
else
mat.scale( -1 / ( numSteps * 1.2 ), -1 / ( numSteps * 1.2 ) );
graphicsView->setMatrix(mat);
e->accept();
}
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
// generate random data to display
//
vector< vector<int> > data;
int seq_length = 5000;
int num_seq = 80;
vector<int> seq0;
for(int j=0;j<seq_length;j++)
{
seq0.push_back( int(rand()/float(RAND_MAX)*4) );
}
data.push_back(seq0);
for(int i=1;i<num_seq;i++)
{
vector<int> seq_i;
for(int j=0;j<seq_length;j++)
{
if(rand()/float(RAND_MAX)*20 < 1)
seq_i.push_back( int(rand()/float(RAND_MAX)*4) );
else
seq_i.push_back( data.at(0).at(j) );
}
data.push_back(seq_i);
}
// the browser stuff
//
scene = new QGraphicsScene();
int y_pos = 0;
for (int i = 0; i < num_seq; i++)
{
int x_pos = 0;
for (int j = 0; j < seq_length; j++)
{
int base = data.at(i).at(j);
BaseTile *item = new BaseTile(base);
item->setPos(QPointF(x_pos, y_pos));
scene->addItem(item);
x_pos += 20;
}
y_pos += 20;
}
graphicsView = new QGraphicsView(this);
graphicsView->setRenderHint(QPainter::Antialiasing, false);
graphicsView->setDragMode(QGraphicsView::ScrollHandDrag);
graphicsView->setOptimizationFlags(QGraphicsView::DontSavePainterState);
graphicsView->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
graphicsView->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
graphicsView->setScene(scene);
graphicsView->setGeometry(QRect(50, 50, 100, 100));
graphicsView->show();
this->setCentralWidget(graphicsView);
}
/////////////////////
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
/////////////////////
/*
g++ -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4 -L/usr/lib -lQtOpenGL -lQtGui -lQtCore -lGLU -lGL -lpthread test.cpp -o test
*/
To copy to clipboard, switch view to plain text mode
Bookmarks