#ifndef MAIN_H
#define MAIN_H
#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:
SeqMap(int seq_length = 1500,int num_seq = 80);
QRectF boundingRect
() const{ return QRectF(0,
0, data.
at(0).
size()*20, data.
size()*20);
}
private:
QVector< QVector<quint8> > data;
};
{
public:
private:
};
/////////////////////
SeqMap::SeqMap(int seq_length,int num_seq)
{
// generate random data to display
data.reserve(num_seq);
QVector<quint8> seq0;
seq0.reserve(seq_length);
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++)
{
QVector<quint8> seq_i;
seq_i.reserve(seq_length);
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);
}
// Prepare 4 textures
for (quint8 i=0;i < 4;++i)
{
QChar base_char
= alpha.
at(i
);
QColor color
= tile_colors
[i
];
textures[i] = pmap;
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
));
}
}
{
Q_UNUSED(widget);
int y_pos = 0;
for (int i = 0; i < data.size(); i++)
{
int x_pos = 0;
for (int j = 0; j < data.at(i).size(); j++)
{
int base = data.at(i).at(j);
painter->drawPixmap(x_pos,y_pos,*textures[base]);
x_pos += 20;
}
y_pos += 20;
}
}
/////////////////////
{
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
) :{
// the browser stuff
scene->addItem(new SeqMap());
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);
}
#endif // MAIN_H
---------------------------------
#include <QtCore>
#include <QtGui>
#include "main.h"
int main(int argc, char *argv[])
{
MainWindow w;
w.show();
return a.exec();
}
#ifndef MAIN_H
#define MAIN_H
#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 SeqMap : public QGraphicsItem
{
public:
SeqMap(int seq_length = 1500,int num_seq = 80);
QRectF boundingRect() const{ return QRectF(0, 0, data.at(0).size()*20, data.size()*20); }
void paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget);
private:
QPixmap* textures[4];
QVector< QVector<quint8> > data;
};
class MainWindow : public QMainWindow
{
public:
MainWindow(QWidget *parent = 0);
private:
void wheelEvent(QWheelEvent * event);
QGraphicsScene *scene;
QGraphicsView *graphicsView;
};
/////////////////////
SeqMap::SeqMap(int seq_length,int num_seq)
{
// generate random data to display
data.reserve(num_seq);
QVector<quint8> seq0;
seq0.reserve(seq_length);
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++)
{
QVector<quint8> seq_i;
seq_i.reserve(seq_length);
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);
}
QString alpha = "ACGT";
QColor tile_colors[] = { QColor("blue"), QColor("green"), QColor("yellow"), QColor("red") };
// Prepare 4 textures
for (quint8 i=0;i < 4;++i)
{
QChar base_char = alpha.at(i);
QColor color = tile_colors[i];
QPixmap* pmap = new QPixmap(20,20);
textures[i] = pmap;
QPainter painter(pmap);
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 SeqMap::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget);
int y_pos = 0;
for (int i = 0; i < data.size(); i++)
{
int x_pos = 0;
for (int j = 0; j < data.at(i).size(); j++)
{
int base = data.at(i).at(j);
painter->drawPixmap(x_pos,y_pos,*textures[base]);
x_pos += 20;
}
y_pos += 20;
}
}
/////////////////////
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)
{
// the browser stuff
scene = new QGraphicsScene();
scene->addItem(new SeqMap());
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);
}
#endif // MAIN_H
---------------------------------
#include <QtCore>
#include <QtGui>
#include "main.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
To copy to clipboard, switch view to plain text mode
I'll have to leave this to you. Gotta do my stuff now :->
Bookmarks