📄 interface.cpp
字号:
/*************************************************************************** * Copyright (C) 2003 by ita * * tnagy@eleve.emn.fr * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/#include <iostream>#include "interface.h"#include "knuminput.h"#include <qstatusbar.h>#include <qlabel.h>#include <qpainter.h>using namespace std; interface::interface( QWidget* parent, const char* name, WFlags fl): Form1(parent,name,fl){ mutations = 0; crossovers = 0; unchanged = 0; printer = 0; layout = new QHBoxLayout(frame3); canvasview = new QCanvasView(frame3,0,0); canvas = new QCanvas(798,298); layout->add(canvasview); canvasview->setCanvas(canvas); lCDNumber1->setSegmentStyle(QLCDNumber::Flat); progress = new QProgressBar(); statusBar()->addWidget( progress, 2, TRUE); nbgenerations = 25; empilement = new Rloc(); init();};interface::~interface(){ delete printer; if (empilement) { delete empilement; }};void interface::init(){ for (int i=0;i<200;i++) { couleurs.push_back(QColor(rand()%155+100,rand()%155+100,rand()%155+100)); } for (int i=0;i<7;i++) { // largeur des colonnes table1->setColumnWidth (i,75); } table1->setText(0,0,QString::number(1500)); table1->setText(0,1,QString::number(1000)); table1->setText(1,0,QString::number(2500)); table1->setText(1,1,QString::number(2000)); table1->setText(2,0,QString::number(3500)); table1->setText(2,1,QString::number(2000)); table1->setText(3,0,QString::number(3000)); table1->setText(3,1,QString::number(1500)); table1->setText(4,0,QString::number(3000)); table1->setText(4,1,QString::number(2000)); table1->setText(5,0,QString::number(5000)); table1->setText(5,1,QString::number(1500)); table1->setText(6,0,QString::number(3000)); table1->setText(6,1,QString::number(1500)); table1->setText(7,0,QString::number(4000)); table1->setText(7,1,QString::number(1500)); table1->setText(8,0,QString::number(4000)); table1->setText(8,1,QString::number(5000)); table1->setText(9,0,QString::number(1500)); table1->setText(9,1,QString::number(500)); canvas->setAdvancePeriod(30); //initialiserTable(); setValeurs(); ratioHauteur = 10; ratioLargeur = 10; //dessiner();}void interface::dessiner(){ //float largeur = canvas->width(); //empilement->iterer(); float hauteur = canvas->height(); float ratio = hauteur*(ratioHauteur/(ratioHauteur+1))/empilement->getLimite(); float decalage = hauteur/(2*ratioHauteur); //cout << "dessiner"<<endl; for (int i=0;i<empilement->getTaille();i++) { //cout <<"r閏up鑢e le premier rectangle"<<endl; int * tab = empilement->getTabRectangle(i); if (!tab) cout <<"segfault here"<<endl; //cout <<"tab 0 vaut : "<<tab[0]<<endl; //cout <<"tab 1 vaut : "<<tab[1]<<endl; //cout <<"tab 2 vaut : "<<tab[2]<<endl; //cout <<"tab 3 vaut : "<<tab[3]<<endl; // les rectangles // QCanvasRectangle * rect = new QCanvasRectangle( \ (int) (ratio * tab[1]), \ (int) (decalage + ratio*tab[0] ), \ (int) (ratio * tab[3]), \ (int) (ratio*tab[2]), \ canvas \ ); rect->setPen(QPen(QColor(rand()%100,rand()%100,rand()%100),0)); //cout << "couleurs"<<tab[4]<<endl; rect->setBrush(couleurs[tab[4]]); rect->setZ(4); rect->show(); // et maintenant le texte // //cout <<"cr閍tion de texte"<<endl; QCanvasText * text = new QCanvasText(canvas); //cout << "letexte"<<endl; text->setText(QString("%1").arg(tab[4])); text->setX((long) (ratio * tab[1] + ratio * tab[3]/2.0)); text->setY((long) (decalage + ratio*(tab[0]+tab[2]/2.0) )); text->setZ(5); text->show(); } lCDNumber1->display( empilement->getHauteur()/1.0 ); setValeurs(); //cout <<empilement->getNGenerations()<<" "<<empilement->getPopulation()<<endl;}void interface::effacer(){ QCanvasItemList list = canvas->allItems(); QCanvasItemList::Iterator it = list.begin(); for (; it != list.end(); ++it) { if ( *it ) delete *it; }}void interface::setValeurs(){ rectLabel->setText( QString::number(empilement->getTaille())); genLabel->setText( QString::number(getNGenerations()) ); largLabel->setText( QString::number( empilement->getLimite()) );}void interface::redessiner(){ effacer(); empilement->Reset(); int taille = 0; for (int kw=0;kw<200;kw++) { int val1 = table1->text(kw,0).toInt(); int val2 = table1->text(kw,1).toInt(); if (val1 >0 and val2>0 and val1 <10000 and val2<10000) { empilement->insereRect(val1,val2); taille++; } } empilement->initialiser(6000,1000,taille); progress->setTotalSteps( getNGenerations() ); for (int w=0;w < getNGenerations() ; w++) { empilement->Iterer(); // gen progress->setProgress(w); } progress->reset(); initialiserTable(); dessiner();}void interface::initialiserTable(){ for (int i=0;i<empilement->getTaille();i++) { int * tab = empilement->getTabRectangle(i); //cout << "tab pris" <<endl; if (!tab) cout <<"pointeur null : segfault"<<endl; int ik = tab[4]; table1->setText(ik,2,QString("%1").arg(tab[0])); table1->setText(ik,3,QString("%1").arg(tab[1])); table1->setText(ik,0,QString("%1").arg(tab[2])); table1->setText(ik,1,QString("%1").arg(tab[3])); table1->setText(ik,4,QString("%1").arg(tab[4])); table1->setText(ik,5,QString("%1").arg(tab[5])); table1->setText(ik,6,QString("%1").arg(i)); } //table1->sortColumn (4, TRUE, TRUE );}int interface::getNGenerations(){ return nbgenerations;};void interface::setNGenerations(){ //nbgenerations = genLabel->text(); //cout <<"nbgenerations :"<<nbgenerations<<endl;};void interface::setMutations(){ //int diff = mutations - mutBox->value(); //mutations += diff; //if ( crossovers > unchanged ) // cout <<"it's late"<<endl;};void interface::setUnChanged(){};void interface::setCrossovers(){};void interface::filePrint(){ if ( !printer ) printer = new QPrinter; printer->setOutputToFile(1); printer->setDocName(QString("binpack1")); printer->setOutputFileName(QString("binpack1.ps")); if ( printer->setup(this) ) { QPainter pp(printer); canvas->drawArea(QRect(0,0,canvas->width(),canvas->height()),&pp,FALSE); } //delete printer;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -