1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
//
// file qtdraw_demo.cc
// Contributed by:
// David Cosgrove
// AstraZeneca
// 24th July 2012
//
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
//
// Uses RDKit draw funtionality to draw a 2D molecule into a Qt widget
#include <QApplication>
#include <QPainter>
#include <QWidget>
// *****************************************************************************
// in file RDKitMolToQPainter.cc
void smiles_to_qpainter( const std::string &smiles , const QString &label ,
int width , int height , bool bow ,
QPainter &qp );
// *****************************************************************************
class RDKitDraw : public QWidget {
public :
RDKitDraw( QWidget *parent = 0 ) : QWidget( parent ) {}
void set_smiles( const std::string &smi ) {
smiles_ = smi;
update();
}
void set_name( const std::string &name ) {
name_ = name;
update();
}
protected :
void paintEvent( QPaintEvent *event ) {
int w = width();
int h = height();
QPainter qp;
qp.begin( this );
qp.setBackground( QColor( "White" ) );
qp.fillRect( 0 , 0 , w , h , QColor( "White" ) );
if( smiles_.empty() ) {
qp.end();
return;
}
smiles_to_qpainter( smiles_ , QString( name_.c_str() ) , w , h , true , qp );
qp.end();
}
private :
std::string smiles_;
std::string name_;
};
// *****************************************************************************
int main( int argc , char **argv ) {
QApplication a( argc , argv );
RDKitDraw *rdkd = new RDKitDraw;
rdkd->setGeometry( 50 , 50 , 500 , 500 );
rdkd->show();
if( argc > 1 ) {
rdkd->set_smiles( argv[1] );
}
if( argc > 2 ) {
rdkd->set_name( argv[2] );
}
if( argc == 1 ) {
rdkd->set_smiles( "[Mg]c1c(C#N)cc(C(=O)NCc2sc([NH3+])c([NH3+])c2)cc1" );
rdkd->set_name( "Molecule 2" );
}
return a.exec();
}
|