⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interface.cpp

📁 LinPacker是一个优化矩形布局的工具
💻 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 + -