View Full Version : [C++] creare e gestire finestre sotto linux
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?
prova le qt4, che sono le migliori per linux e sono multipiattaforma.
ovviamente in c++:)
http://www.qtsoftware.com/
attenzione alle licenze :D
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?
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. :)
qualcosa del genere...
cmq sono vicino alla soluzione....
vi faccio sapere a breve..:)
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.
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?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.