multiplatformos fejlesztés wxwidgets-szel

Fórumok

nekiálltam vindóz alatt wxdev-cpp-vel egy wxwidgets-es alkalmazás fejlesztésének
szépen megy is minden, de szeretném Linux alatt is lefordítani. hogy álljak neki?
fogtam a Kdevelopot, új wxwidgets project, belapátoltam a file-okat, de a make elhasal...
hogy kéne ezt csinálni?

Hozzászólások

ehem. Azt nemtom, hogy hogyan kell IDE-vel csináltatni Makefile-t, viszont kézzel nagyon egyszerű. Pld. a forráskód könyvtárába csinálsz egy file-t, ügyelsz arra, hogy tabbal történjen az indentálás (ahol írtam hogy tab, ott 1 tab legyen a szöveg és a sor eleje között, csak itt hupon nemtom hogy kell ezt beszúrni):


CXX = $(shell wx-config --cxx)
 
PROGRAM = wxProgram
 
OBJECTS = main.o MainFrame.o
 
# implementation
 
.SUFFIXES:      .o .cpp
 
.cpp.o :
 tab $(CXX) -c `wx-config --cxxflags` -o $@ $<
 
all:    $(PROGRAM)
 
$(PROGRAM):     $(OBJECTS)
 tab $(CXX) -o $(PROGRAM) $(OBJECTS) `wx-config --libs`
 
clean:
 tab rm -f *.o $(PROGRAM)

Na ez egy alap verzió, de ezt aztán lehet módosítgatni. Beírod shell-be hogy make, aztán már fordul is a cucc.
Természetesen a PROGRAM és az OBJECTS változóknak a projekted szerint adj értéket.

köszi a gyors választ!
Makefile van (bár nem kézzel csináltam, hanem az automake :D)
bár kipróbálom, hátha tényleg ez a baj,de inkább másra gyanaXom

a hibaüzi eleje a következő:

lapper.cpp:23: error: `lapperFrame' has not been declared
lapper.cpp:23: error: non-member function `const wxEventTable* GetEventTable()' cannot have `const' method qualifier
lapper.cpp: In function `const wxEventTable* GetEventTable()':
lapper.cpp:23: error: `lapperFrame' has not been declared
lapper.cpp:23: error: `sm_eventTable' was not declared in this scope
lapper.cpp:23: warning: unused variable 'sm_eventTable'
lapper.cpp: At global scope:
lapper.cpp:23: error: `lapperFrame' has not been declared
/usr/local/include/wx/frame.h:222: error: `const wxEventTable wxFrameBase::sm_eventTable' is protected
lapper.cpp:23: error: within this context
lapper.cpp:23: error: `lapperFrame' has not been declared
lapper.cpp:23: error: `sm_eventTableEntries' was not declared in this scope
lapper.cpp:23: error: `lapperFrame' has not been declared
lapper.cpp:24: error: `Menu_File_Quit' was not declared in this scope
lapper.cpp:24: error: `lapperFrame' has not been declared
lapper.cpp:24: error: `OnQuit' was not declared in this scope
lapper.cpp:25: error: `Menu_File_About' was not declared in this scope
lapper.cpp:25: error: `lapperFrame' has not been declared
lapper.cpp:25: error: `OnAbout' was not declared in this scope
lapper.cpp: In function `wxApp* wxCreateApp()':

a szóban forgó file tartalma (az elejéről a megjegyzéseket kitöröltem, a 23. sor a BEGIN_EVENT_TABLE-s):

#include
#include "lapper.h"

BEGIN_EVENT_TABLE( lapperFrame, wxFrame )
EVT_MENU( Menu_File_Quit, lapperFrame::OnQuit )
EVT_MENU( Menu_File_About, lapperFrame::OnAbout )
END_EVENT_TABLE()

IMPLEMENT_APP(lapperapp)

bool
lapperapp::OnInit()
{
lapperFrame *frame = new lapperFrame( wxT( "Hello World" ), wxPoint(50,50), wxSize(450,340) );

frame->Show(TRUE);
SetTopWindow(frame);
return TRUE;
}

lapperFrame::lapperFrame( const wxString& title, const wxPoint& pos, const wxSize& size )
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
wxMenu *menuFile = new wxMenu;

menuFile->Append( Menu_File_About, wxT( "&About..." ) );
menuFile->AppendSeparator();
menuFile->Append( Menu_File_Quit, wxT( "E&xit" ) );

wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, wxT( "&File" ) );

SetMenuBar( menuBar );

CreateStatusBar();
SetStatusText( wxT( "Welcome to Kdevelop wxWidgets app!" ) );
}

void
lapperFrame::OnQuit( wxCommandEvent& WXUNUSED( event ) )
{
Close(TRUE);
}

void
lapperFrame::OnAbout( wxCommandEvent& WXUNUSED( event ) )
{
wxMessageBox( wxT( "This is a wxWidgets Hello world sample" ),
wxT( "About Hello World" ), wxOK | wxICON_INFORMATION, this );
}

nem, ott volt egy csak gondolom a fórummotor leszedte, azt hitte html tag :)
viszont azt hiszem, nyomon vagyok. kicsit beletúrtam a kdevelopba.
a wxDev-Cpp a következő file-okat tette a projectbe:
lapperApp.cpp
lapperFrm.cpp

viszont a KDevelopban egyedül a saját maga által kreált lapper.cpp szerepel. hogy tudom neki megmondani hogy nekem nem kell a lapper.cpp, kell viszont a lapperApp.cpp és a lapperFrm.cpp?
nézegettem a project beállításokat, a filecsoportokat, de sehol nem találtam ilyen lehetőséget (pedig tuti ott van, csak én vagyok nagyon béna :D)

MOD: megvan, a megoldás a Makefile.am :)
most már egész szépen állok, frissítek egy új wxwidgets-re oszt' hátha...

úgy tűnik, mégsem ez a gond
valamiért meg voltam győződve róla hogy a rand() [0;1[ intervallumban adja a számokat, erre kiderült hogy int a visszatérési érték...
ez csak azért furcsa, mert az előbbi logika alapján számolva vindóz alatt tökéletes az eredmény...
lehet hogy a fordító olyan kódot generál ahol vmi túlcsordulás miatt pont működik? vagy vindóz alatt tényleg [0;1[ -et ad vissza? na amint egy vindóz közelébe kerülök kipróbálom :)

MÁS:

keresztplatformos fejlesztésről lévén szó, jó lenne ha windows és Linux alatt egyaránt tudnék file-okat menteni. perpill. ebben az akadályoz, hogy Linux alatt '/' , vind alatt meg '\' a könyvtárelválasztó.
hogy lehetne vagy lekérdezni fordítási időben hogy milyen opr. alatt vagyok, vagy más módon eldönteni hogy mi kell nekem? van egy-két vad ötletem, de ha van rá szabályos megoldás, akkor inkább használnám azt...

két új kérdés:
1. hogy tudom a parancssori paramétereket kezelni? itt ugye nincs main amiben az argc és argv változókat tudom kezelni...

2. hogy csináljak helpet, hogy az mindkét oprendszeren működjön?

köszi mindkét segítséget!

ez a commandline kezelés nekem kicsit vad (meg sokkal többet is tud, mint nekem kell), azért megpróbálom kihámozni belőle a lényeget
nekem igazából csak az kellene, hogy egy változóba valahogy bele tudjam rakni az első parancssori paramétert (ami egy filenév elérési úttal) (mindenféle '-' ellenőrzés meg egyebek nélkül...)

egész szépen haladok :)
viszont újabb probléma merült fel, ha valaki tud léCCi segítsen
szeretném egy wxTextCtrl-ben lekezelni a duplaklikket.
próbáltam a wxFrame-re beállítani, de meg sem hívódik a function, hiába klikkelgetek jobbra-balra
hogy kellene ezt megoldani?

Azt hiszem az okozza a gondot, hogy a duplaklikk eseményt (és az egér eseményeket általában) csak ott tudod elkapni ahol kiváltódtak, tehát a textCtrl-ben.
Tehát azt az EVT_LEFT_DCLICK nem a Frame event table-jében kéne legyen, mert így elvileg azokat a duplakattintásokat kepod el amik a frame-en történtek. Nyilván ha leraktál egy Panel-t vagy valamit, akkor azokat amiket oda nyomsz megint nem kapod el...

A megoldás tehát az, hogy a saját TextCTRL osztályodban kapod el a duplakattot, majd továbbküldöd mint wxCommandEventet:



wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetId());
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);				

Sajnos DCLICKED esemény nincs, és ez egyébként sem button de teljesen mindegy milyen eseményt dobsz, csak arra kell, hogy el tudd kapni...

Ezt meg normálisan el tudod kapni EVT_BUTTON( id, lapperFrm::DoubleClick)-el, ahol az id értelemszerűen a TextCtrl id-je.

Ez talán kicsit gányolás, hogy nem DCLICKED eseményt dobtunk, mert mi van, ha a kattintást is kezelni akarod, megteheted hogy egy új EVT_COMMAND_TEXTCTLR_DCLICK eseményt definiálsz magadnak, hogy hogyan az benne van a fentebb linkelt leírásban.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

na mégegy gond (azért nemt'om figyelitek-e, egyre 'komolyabb' problémáim vannak, a végén még megtanulok programozni :D)
szóval a programom egy csomó szövegfile-t kezel (wxTextFile)
ezeket szeretném egy zip-be csomagolva kezelni. van is ugye erre egy wxFileSystem nevű találmány, de nem sikerült rájönnöm, hogy tudok megnyitni belőle wxTextFile-ként valamit. amit találtam az annyi hogy stream-ként tudom kezelni. ugye meg lehet ezt oldani, mert stream-ekkel nem akarok buveszkedni, meg megegyszer megirni a komplett wxTextFile-t csak hogy zipfs-bol is menjen...

El kell, hogy szomorítsalak, de a To-Do listben az van, hogy:
"Integrate wxFileSystem with wxWidgets (currently only wxHtml uses it)."
Gondolom ez egyértelmű...

Egyébként semmi extra nincs a wxTextFile-ban, annyit csinál, hogy beolvassa a teljes file-t egy wxArrayString-be.

Szerintem 10 sorból megvagy. :)

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Nekem a wxdev-cpp-vel kapcsolatban lenne kérdésem, ha valaki használja! (esetleg codeblocks alatt ugyanaz)
Hogyan lehet az IDE elemkészletét bővíteni további wxWidgets komponensekkel úgy, hogy azok megjelenjenek a "from designer" ablaknál?