PDA

View Full Version : [C++] creare e gestire finestre sotto linux


Ricky
26-01-2009, 18:28
Ciao a tutti,
devo creare un applicazione piu' o meno complessa che abbia diverse informazioni di stato. Ogni Gruppo di informazioni deve essere gestito in maniera indipendente su finestre indipendenti.
Esiste una bella libreria di c++ che mi da la possibilita' di creare oggetti finestra e di modificare le informazioni contenute in questi oggetti anche aposteriori?
In poche parole io devo avere queste tre finestre aperte che si aggiornano e sulle quali e' possibile fare delle interazioni (tipo indicare una cosa piuttosto che un altra ect).
Ho visto le wxwidget...e' la strada giusta?

ArtX
26-01-2009, 21:02
prova le qt4, che sono le migliori per linux e sono multipiattaforma.
ovviamente in c++:)
http://www.qtsoftware.com/
attenzione alle licenze :D

Ricky
27-01-2009, 01:22
ho letto tardi ed ho già installato il modulo gtkmm.
Pensavo che la finestra venisse creata in un thread differente. Invece la chiamata Run è anche in questo caso bloccante. Mi spiego:

#include <gtkmm.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
Gtk::Main kit(argc, argv);

Gtk::Window window;


Gtk::Main::run(window);

cout<<"Prova"<<endl;

return 0;
}


Se io volessi cambiare a posteriori le informazioni presenti nella finestra da codice non è possibile!
Qt da la possibilità di eseguire in maniera indipendente (quindi magari un thread però gestito automaticamente) oppure devo fare io la gestione dei thread a manina?

Ricky
27-01-2009, 04:10
non riesco a dormirci su.

non riesco a fare una classe che faccia qualcosa del genere:

class SomeClass
{
void showWindow();
void setSomeValueOnWindow();
}
Vorrei poter cambiare le informazioni di una finestra direttamente via codice.
Esempio:

class otherClass
{
void inizializza();
void CambiaValori();
private:
SomeClass a;

}
qualcuno di voi ha fatto qualcosa del genre?

DanieleC88
27-01-2009, 19:29
:eekk:

Dimmi che non hai passato una notte intera a lottare con GtkMM! :eekk:
Ad ogni modo, cambiare le proprietà della finestra a run-time è sicuramente possibile in qualche modo, tu che intendi per "non è possibile"? Non ho capito cosa stai cercando di fare. :)

Ricky
27-01-2009, 21:21
qualcosa del genere...
cmq sono vicino alla soluzione....
vi faccio sapere a breve..:)

Ricky
05-02-2009, 00:27
ho risolto il problema utilizzato le gtkmm (wrapper c++ delle gtk+), eseguendo il painting della finestra in un thread separato.
La cosa un pò bruttina diciamo è che il Gtk::Main va inizializzato nel main del programma, ma posso accedere al singleton dell'istanza generata a monte.

Non sono proprio sicuro che il painting della finestre eseguito asincronamente sia Thread Safe, quindi se aggiungo oggetti o robe del genere è probabile che alla lunga vada in SegFault, anche se non m'è mai capitato.
La struttura del programmino è questa:

myClass : public Gtk::Window
{
myClass(){
k=Gtk::Main::instance();
}
void OtherMethods(){
//add,modify and remove widget to scene

}

//richiamato dalla pthread come spiegato qui http://www.hwupgrade.it/forum/showthread.php?t=1907615
void render(){
k->run();
}

private:
Gtk::Main *k;

}

In sostanza avvio la finestra e cambio il suo contenuto mentre la finestra è sempre attiva.

Ricky
05-02-2009, 01:49
altro problema...
Mentre la finestra e li che si ridipinge, finche io non muovo il mouse nella finestra gli oggetti non si aggiornano...come mai? esiste qualche funzione che ridipinge autonomamente la finestra?