|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
[C++/wxWidgets] Progetto-Visualizzatore di Immagini
Ciao a tutti,per il corso di C++ il professore mi ha assegnato di fare un visualizzatore di immagini usando le wxWidgets
Le ho provate ma non mi picciono propio...molto meglio le QT. L'unica problema è che un altro gruppo fa un visualizzatore di immagini...loro con le QT. Se parlo con il professore sicuramente potrei cambiare e usare le QT ma volevo sapere se esisteva qualcosa di diverso oltre QT e wxWidgets. Ultima modifica di Mulder90 : 30-07-2010 alle 17:51. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
gtk+?
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
Quote:
Conoscete qualche libreria adatta a fare un visualizzatore di immagini? Ultima modifica di Mulder90 : 07-05-2010 alle 15:15. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Ma se vai con le Qt è decisamente tutto più bello e più facile: usi un bel PictureFlow e fai un figurone. Magari ti diverti pure con l'AnimationFramework. Io in questo periodo mi sto divertendo con QML (alias Qt Quick), semplicemente fantastico. |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Apr 2010
Messaggi: 56
|
wxWidgets e GTK+ (in questo caso meglio il binding C++ gtkmm) sono esclusivamente widget toolkit, mentre Qt è un framework vero e proprio.
PS: se sei sicuro di poter cambiare e usare le Qt... fallo, e anche di corsa. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
mmm OpenCV mi sembra un pochino troppo.
Quote:
Grazie mille del consiglio. Se dovessi essere obbligato a usare wxWidgets conosci qualcosa di simile per loro? |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
bene mi è arrivata la mail del professore e devo fare il progetto con le wxWidgets...
Conoscete qualche libreria per gestire le immagini in modo semplice? |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
ok ragazzi dopo aver fatto gli altri esami è venuto il momento di fare questo progetto.
Ho subito un pò di dubbi. Se l'immagine è più grande rispetto alla dimensione dell'applicazione mi conviene ridimensionare l'immagine giusto? Nel progetto devo utilizzare i pattern Observer-MVC. Il problema è che non capisco dove utilizzarli. Mi spiego meglio: Lo potrei utilizzare per tenere aggiornata la lista delle immagini presenti nella cartella giusto? Mi sembra l'unico utilizzo utilizzo sensato. Il pattern MVC da quello che ho capito è molto legato al pattern Observer,qualcuno sa consigliarmi un sito dove trovafre della buona documentazione? Voi come lo impostereste un progetto del genere?(non chiedo il codice ma solo un'idea sull'impostazione da seguire) |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
uuuuuuuuup
Mi sono letto un po di roba sul pattern MVC. Da quello che ho capito devo strutturare il progetto in 3 parti. Model: dove deve essere implementato il "core" dell'applicazione. View:dove implemento la GUI. Controller:qui ho dei dubbi.Da quello che ho capito deve essere un "ponte" tra Model e View e quindi devo implementare la logica dei buttons ecc...(probabilmente ho detto un cavolata Il problema è che non capisco come faccia tutto ciò ad avere un livello di disaccoppiamento adeguato. Se uso le wxWidgets per esempio i tre livelli non sono tutti e tre legati da questo framework?? |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
Quote:
Controller può dire a Model di "aggiornarsi", nel tuo caso ad esempio può dire che l'utente ha scelto un'altra immagine da visualizzare, quindi Model ricevendo l'ordine da Controller carica l'immagine e notifica a tutte le eventuali views (che quindi deve tenersi in qualche modo) di ridisegnarsi Chiaramente, per scopi diversi, tutte le tue classi dovranno utilizzare wxwidgets, ma questo è ininfluente, il rapporto tra le tre classi deve essere quello del pattern MVC |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Secondo me cercare di infilare l'MVC in questi framework è controproducente, in generale hai un controller per ogni form, questo controller si trova a dover gestire ogni possibile evento scatenato da tutti i controlli grafici sotto il suo controllo, risultando una inutile duplicazione di quello che già viene fornito di default dai toolkit grafici tramite il Presenter. Una sana strutturazione ad almeno 3 livelli (in cui i livelli business e data access costituiscono fondamentalmente il Model dell'MVC/P)dovrebbe essere la più indicata per questi framework. |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
|
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
Quote:
"Questi esempi richiedono di usare quantomeno il pattern Observer, e usando WxWidgets per l'interfaccia grafica anche l'MVC (http://it.wikipedia.org/wiki/Model-View-Controller). Ovviamente non importa raggiungere il livello di completezza, pulizia e design di un programma professionale, mi accontento di vedere l'impiego dei pattern e delle tecniche di progettazione e implementazione OO." Ora la seconda parte forse riassume la tua idea sulla controproduttività poichè come dice devo solo impiegare questi pattern in modo da far vedere che ho capito più o meno di cosa stiamo parlando... Però come posso affrontare la prima parte?Cioè come lo posso strutturare questo visualizzatore di immagini? |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
allora mi sono messo a scrivere qualcosa e non capisco perchè l'immagine viene visualizzata male.Così per esempio:
![]() EDIT:mi sono reso conto che impostando il secondo valore di questa riga Codice:
Sizer->Add(Picture, 1, wxALL|wxEXPAND, 5 ); MEtto quel poco che sono riuscito a scrivere sperando che qualcuno mi possa dare una mano view.h Codice:
#include <wx/wx.h>
#include <wx/image.h>
#include <wx/filedlg.h>
class Frame : public wxFrame
{
public:
Frame(const wxString& title,const wxPoint& pos,const wxSize& size);
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
void OnOpen(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
};
enum
{
ID_Open,
ID_Quit,
ID_About,
};
Codice:
#include "view.h"
Frame::Frame(const wxString& title,const wxPoint& pos,const wxSize& size)
: wxFrame(NULL, -1,title,pos,size,wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL )
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
wxMenu* menuFile = new wxMenu;
menuFile->Append(ID_Open,wxT("&Open"));
menuFile->Append(ID_Quit,wxT("&Exit"));
wxMenu* menuAbout= new wxMenu;
menuAbout->Append(ID_About,wxT("&About"));
wxMenuBar* menuBar = new wxMenuBar;
menuBar->Append(menuFile, wxT("&File"));
menuBar->Append(menuAbout, wxT("&About"));
SetMenuBar(menuBar);
}
void Frame::OnQuit(wxCommandEvent& event)
{
Close(true);
}
void Frame::OnOpen(wxCommandEvent& event)
{
wxString caption = wxT("Choose a file");
wxString wildcard =
wxT("All files (*.*)|*.*|BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif|JPEG files (*.jpg)|*.jpg");
wxString defaultDir = wxT("C:\\");
wxString defaultFilename = wxEmptyString;
wxFileDialog dialog(NULL, caption, defaultDir, defaultFilename,
wildcard, wxOPEN);
if (dialog.ShowModal() == wxID_OK)
{
wxString img = dialog.GetPath();
int filterIndex = dialog.GetFilterIndex();
if(img.empty()== false)
{
wxBoxSizer* Sizer = new wxBoxSizer(wxHORIZONTAL);
wxStaticBitmap* Picture = new wxStaticBitmap(this,wxID_ANY,wxBitmap(img,wxBITMAP_TYPE_ANY),wxDefaultPosition,wxDefaultSize,0);
Sizer->Add(Picture, 1, wxALL|wxEXPAND, 5 );
this->SetSizer( Sizer );
this->Layout();
}
img.Clear();
}
}
void Frame::OnAbout(wxCommandEvent& event)
{
wxMessageBox( wxT("Creato da Lorenzo Cinque!!!"),
wxT("About"),
wxOK | wxICON_INFORMATION, this );
}
BEGIN_EVENT_TABLE(Frame, wxFrame)
EVT_MENU(ID_Open,Frame::OnOpen)
EVT_MENU(ID_Quit, Frame::OnQuit)
EVT_MENU(ID_About, Frame::OnAbout)
END_EVENT_TABLE()
Codice:
#include <wx/wx.h>
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
Codice:
#include "main.h"
#include "view.h"
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
wxInitAllImageHandlers();
Frame* frame = new Frame(wxT("ImageViewer"), wxPoint(100,100),wxSize(800,600));
frame->Show(true);
SetTopWindow(frame);
return true;
}
Qualcuno lo può provare e consigliarmi qualche strada? Inoltre se apro un'altra immagine mi rendo conto che quella sotto rimane,come faccio a cancellarla e a liberare lo spazio nel momento in cui apro un'atra immagine? Grazie a tutti quelli che avranno la volontà di aiutarmi P.S: sono agli inizi quindi le critiche sono ben accette |
|
|
|
|
|
#18 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
http://qt.nokia.com/developer/qtquar...lr-adventures/ http://labs.trolltech.com/blogs/cate...mpilers/qlalr/ http://labs.trolltech.com/page/Projects/Compilers/QLALR QLALR è compreso fra i tool che QT mette a disposizione!
|
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
sono riuscito a far visualizzare l'immagine per bene dentro un pannell!!!
Però ora ho una domandina semplice semplice Così riuscirei a visualizzare l'immagine sempre al centro anche se allargo/rimpiccolisco l'applicazione... Per ora è l'unica idea che mi è venuta in mente per fare ciò |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
|
Allora dopo parecchi problemi sono riuscito a fare qualcosa di funzionanete e ieri sono andato a farglielo vedere al professore ma non è stato apprezzato come desideravo >
In effetti dopo averci parlato un po mi ha fatto capire che il pattern va utilizzato per risolvere un problema ricorrente concreto e non, come ho fatto io, solo per superare l'esame. In pratica ce lo avevo infilato a forza e il risultato è che era praticamente inutile... (rotfl) Il professore mi ha fatto uno schema su come reimpostare il programma e su questo però mi sono venuti dei dubbi. eccolo: ![]() Da quello che ho capito il subject rappresenta i dati e quindi nel mio progetto dovrebbe essere la lista di immagini giusto? L'observer rappresenta ciò che osserva il subject. L'observer è in attesa di cambiamenti da parte del subject e quando questi avvengono attraverso una funzione notify il subject avverte tutti gli observer i quali si aggiornano tramite la funzione Update. Nel mio caso quindi gli observer dovrebbero essere List Viewer e quindi un lista visiva di immagini e l'immagine visualizzata nel panello(???). Quindi tramite l'update dovrei aggiornare: - le dimensioni dell'immagine e ridimensionarla in base al panello - la lista accanto al panello dove ci sono le immagini. I miei dubbi riguardano l'observer Image Viewer dello schema del professore. Non capisco quale deve essere l'observe concreto. Mi spiego meglio: L'immagine visualizzata cambia ogni volta che scorro oppure quando apro nuove immagini....insomma non è un oggetto fisso. L'unica cosa che è sempre fissa è il panello e quindi qualcosa mi dice che l'observer deve essere lui ma la cosa che mi frena è che poi è l'immagine a dover essere ridimensionata e quindi il metodo update deve essere chiamato sull'immagine. Qualcuno a qualche consiglio su come strutturare il programma(classi)??? Mi potete dire se il mio ragionamento è sbagliato?? Insomma cerco lumi. P.S: il codice non lo posto (per ora) tantoprima devo risolvere i problemi logici e non di codice che non funiona ecc..(anche perchè il programma funziona e svolge discretamente il suo lavoro) Ultima modifica di Mulder90 : 15-09-2010 alle 11:02. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:37.






















