Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2008-11-13 01:58:09

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Programowanie w wxWidgets

Chciałem się nauczyć programować w GTK znalazłem taki [url=http://www.programuj.com/artykuly/linux/gtk.php]kurs[/url]. No i czy jest możliwość projektowania interfejsu graficznie a potem napisania kodu pod to??  Podobno glade umie takie coś robić ale udało mi się tylko stworzyć interfejs a nie wiem gdzie jest kod źródłowy do aplikacji ;/ w ogóle nic nie mogę znaleźć na temat takiego programowania w gtk. Macie jakieś dobre linki na ten temat??

Ostatnio edytowany przez giegiel (2008-12-29 12:33:17)

Offline

 

#2  2008-11-13 08:04:14

  owca - Członek DUG

owca
Członek DUG
Skąd: Szczerców
Zarejestrowany: 2007-01-30
Serwis

Re: Programowanie w wxWidgets

W glade to się robi tak, że projektujesz w nim interfejs, zapisujesz i w kodzie programu korzystając z biblioteki libglade (lub libglademm dla C++) dynamicznie go wczytujesz. Glade to generował kod - zdaje się - w starszych wersjach.
http://users.bigpond.net.au/mlm/libglade/
http://library.gnome.org/devel/libglade/unstable/
http://www.jamesh.id.au/software/libglade/
google.pl->libglade

Też się nad tym gtk tak męczyłem, ale odkąd "poznałem" wxwidgets i qt - zrezygnowałem z niego.

Offline

 

#3  2008-11-13 11:50:24

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: Programowanie w wxWidgets

Szczerze mówiąc, robienie czegokolwiek w PyGTK (z samym GTK się nie bawiłem, ale coś mi mówi, że wcale nie jest better) było dla mnie zawsze męką. Po cholerę robić connect("slotname", handler) dla każdego handlera sygnału, nie lepiej stworzyć sobie klasę która dziedziczy ze standardowego buttona i ustawia własny handler, jak tu:

Kod:

class myButton(gtk.Button):
    def on_click(self, data):
        print "Hello"

Albo po prostu podmienić odpowiednie metody w instancji klasy:

Kod:

b = Button()
b.on_click = lambda widget, data: print "Hello"

Nie, nie może być takie proste, przecież programowanie musi być "trudne"... Nie, wróć -> męczące.

Nie mówiąc już o tym, że gdy chcemy usunąć jakiś handler, musimy zachować deskryptor zwrócony przez connect() i użyć go do zwolnienia handlera, zamiast (jak w o wiele bardziej intuicyjnym, "alternatywnym, nieistniejącym, wymyślonym API harrego") po prostu usunąć referencję.

Dzięki temu programując w Pythonie wcale nie ma różnicy, czy programujesz w Pythonie, czy w C! :)

:(

Nawet nie chce mi się próbować Glade, nawet jeśli miałoby się okazać przyjemniejsze.

P.S.

GStreamer jest jeszcze gorszy -- dobrze, że w porę odkryłem python-pyxine, inaczej bym się zaje... konwertując nanosekundy na jakieś przyjemniejsze jednostki (i domyślając się kiedy jakich użyć) czy wpychając gdzieś główną pętlę GObject w czysto konsolowym programie. Argh >_<


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#4  2008-11-13 12:25:21

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Programowanie w wxWidgets

Kurde to GTK jest bez sensu ;/ wczesniej generował kod a teraz nie? wxWidgets zaczełem się bawić ;) chyba przyjaźniejszy bo ten GTK to masakra jakaś ;/ Dzięki chłopaki ;) a macie może jakieś dobre howto? Do tego? Po polsku najlepiej ;) I IDE znalazłem wxGlade co mówicie dobre? czy jest lepsze jakieś ;) pozdroo

Offline

 

#5  2008-11-13 13:57:39

  zwierzak - Użytkownik

zwierzak
Użytkownik
Skąd: /dev/null
Zarejestrowany: 2008-11-09

Re: Programowanie w wxWidgets

Osobiście polecam Qt, jest dużo przyjemniejsze dla programisty niż GTK+.

Po pierwsze jest w C++ (dla niektórych wada, ale nie w wypadku Qt)
Po drugie samo Qt czerpie najlepsze przykłady z Javy, Pythona i innych podobnych języków (o ile da się to zapisać w C++ i ma to sens)
Po trzecie Qt jest bardzo intuicyjne
Po czwarte świetny system sygnałów i gniazd! GTK+ tylko nieumiejętnie stara się go naśladować
Po piąte biblioteka jest bardzo mocno nastawiona na programowanie obiektowe.


[img]http://i18.photobucket.com/albums/b150/uncleallevil/moderatorzy.jpg[/img]

Offline

 

#6  2008-11-13 15:57:25

  owca - Członek DUG

owca
Członek DUG
Skąd: Szczerców
Zarejestrowany: 2007-01-30
Serwis

Re: Programowanie w wxWidgets

http://helion.pl/ksiazki/cppwyk.htm - książka opisująca biblioteki wxwidgets i qt. Najlepsza pozycja na rynku. Warto odżałować trochę grosza.

Offline

 

#7  2008-11-13 18:31:18

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Programowanie w wxWidgets

A coś z neta dobrego?? Przyznam programowanie okienek w linuksie jest trudne ;/ szkoda że nie ma czegoś takiego jak VC# na Windowsa ;) i InteliSense genialne to jest ;)

Offline

 

#8  2008-12-25 22:34:09

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Programowanie w wxWidgets

Mam tą ksiązkę bardzo fajna jest ;) Zainstalowałem sobie wxdev-cpp na wine (fajne środowisko wszystko fajnie się robi bo te linuksowe IDE do wxWidgets są beznadziejne). No i mam problem jak chce kompilować na linucha aplikacje utworzone właśnie tam.
Znalazłem na jakiejś stronie że właśnie tak kompiluje się programy zrobione w wxdev-cpp ale wywala mi bład:

Kod:

kuba@debian:~/wx/pr1$ g++ `wx-config --libs --cflags` *.cpp
ProgramFrm.cpp: In member function ‘void okno_main::CreateGUIControls()’:
ProgramFrm.cpp:69: error: converting to execution character set: Błędny lub niepełny znak wielobajtowy
ProgramFrm.cpp: In member function ‘void okno_main::WxButton2Click(wxCommandEvent&)’:
ProgramFrm.cpp:94: error: conversion from ‘const char [32]’ to ‘const wxString’ is ambiguous
/usr/include/wx-2.6/wx/string.h:643: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:633: note:                 wxString::wxString(int) <near match>
ProgramFrm.cpp:95: error: conversion from ‘const char [21]’ to ‘const wxString’ is ambiguous
/usr/include/wx-2.6/wx/string.h:643: note: candidates are: wxString::wxString(wxChar, size_t) <near match>
/usr/include/wx-2.6/wx/string.h:633: note:                 wxString::wxString(int) <near match>

A oto ten cały kod który próbuję skompilować http://www.speedyshare.com/205890895.html

pozdrawiam

Offline

 

#9  2008-12-26 13:38:29

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: Programowanie w wxWidgets

@giegiel:

Jak chcesz IDE do wxWidgets to CodeBlocks się kłania :) - całkiem niezłe... z wbudowanym Gui designerem i auto uzupełnianiem kodu - niestety często się sypie z rożnych dziwnych powodów - ja tez ci radzę przeżuć się na QT - tutaj QT CReator daje czadu ;p - wszystko działa tak jak powinno - auto uzupełnianie kodu, tworzenie GUI, zarządzanie projektem itd - program jest co prawda w wersji alpha http://trolltech.com/developer/qt-creator - ale jak dla mnie jest bardzo stabilny (no dobra od czasu do czasu potrafi się sypnąć przy tworzeniu interfejsu - ale da się przeżyć :). Dodatkowy plus (no dla niektórych pewnie minus ;] ) QT Creator jest również dla Maca i Windosa.

Co do wxDev'a - fajny programik, ale pod wine potrafi się posypać z nieznanych powodów a wersji natywnej brak :(, no i ten czas kompilacji... potrafi odstraszyć :/

I jeszcze raz wracając do api - bardziej intuicyjnego niż QT, z lepszą pomocą i mnóstwem przykładów nie znajdziesz ;] - wierz mi, ostatnio szukałem dobrego designera do mojego projektu i zarówno Gtk jak i wxWidgets nie posiadały takiego (Gtk – jest trochę programów ale najczęściej śmigają tylko pod Linuksem i brakuje im funkcjonalności (np. Anjuta), wx'y niby mają kilka dobrych IDE'ków (CodeBlocks, wxDev-c++) ale często są z nimi różnorakie problemy (wxDev – tylko Windos, pod wine mimo że jest jako Platinum potrafi się sypnąć... z kolei CodeBlocks działa różnie sprawnie w  zależności od systemu), nie mówiąc już o tym że QT to jak dotąd jedyne API które nie wymaga 30 linii kodu tylko po to żeby wyświetlić najprostszy widget... (no dobra wiem że troszkę przesadzam – no ale prawdą jest że zarówno Gtk jak i wx'y wymagają więcej kodu i mąceni tylko po to żeby wyświetlić głupi przycisk).

Tak więc radzę – wypróbuj QT Creatora – warto.

P.S

Tutaj jeszcze pytanie do reszty – czy ktoś zna jakiegoś IDE'ka do Gtk który posiadałby dobre auto uzupełnianie kodu? (mimo że programuje obecnie w QT dobrze by było wiedzieć ;] )

Offline

 

#10  2008-12-26 13:40:53

  urug - Członek DUG

urug
Członek DUG
Skąd: Częstochowa
Zarejestrowany: 2008-04-22
Serwis

Re: Programowanie w wxWidgets

Gtkmm jest całkiem fajny. Gdybyś był zainteresowany, to tutaj jest ciekawa książka:
http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/pdf/programming-with-gtkmm.pdf


Pozdrawiam, Tomek

Offline

 

#11  2008-12-26 15:48:46

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Programowanie w wxWidgets

hmmm... zaraz zainstaluje code blocs zobaczę co to jest ;) co do wxdev-cpp nio sa błędy ale ogólnie jest ok i mi jak na moje dotychczasowe potrzeby pasuje więc jakby mi ktoś jeszcze podpowiedział jak to skompilować to by było super ;).


Póki co zostanę przy wxWidgets może później QT ;) zobaczymy hehe



EDIT:
Dobra zainstalowałem wxWidgets oraz wxGTK ze źródełek (wcześniej miałem z repo) i skompilowało się ale jak chcę uruchomić to czopka bo wyskakuje:

Kod:

./a.out: error while loading shared libraries: libwx_gtk2_richtext-2.8.so.0: cannot open shared object file: No such file or directory

i nie mogę znaleźć odpowiedzi w google co z tym teraz.

Ostatnio edytowany przez giegiel (2008-12-26 16:21:57)

Offline

 

#12  2008-12-26 20:29:17

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: Programowanie w wxWidgets

No jak tam chcesz - ale pewnie "wrócisz" do QT ;]

A co do powyższego błędu - zapewne masz za starą (lub nie masz wcale) biblioteki o którą się pluje.

Offline

 

#13  2008-12-27 00:48:11

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Programowanie w wxWidgets

[quote=Huk]No jak tam chcesz - ale pewnie "wrócisz" do QT ;]

A co do powyższego błędu - zapewne masz za starą (lub nie masz wcale) biblioteki o którą się pluje.[/quote]
Hehe domyślam się ale mam wszystko zainstalowane ;/
A co do Qt to niedługo na pewno spróbuję ;)

Offline

 

#14  2008-12-27 03:28:28

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: Programowanie w wxWidgets

Nie chce za bardzo "cukrować" - ale właśnie to jest chyba największy plus QT (oj wiem wiem przechwalam - ale jakoś mi się spodobało ;p ) nie ma w zasadzie możliwości żeby ci się plunął o bark jakiejś biblioteki „X” - bo QT nie jest sfragowane - instaluje się wszystko od razu... co do problemu jeżeli masz tą/tę (nigdy nie wiem które jest poprawne) bibliotekę - to możesz spróbować podlinkować ją do /usr/lib /usr/local/lib i folderu z aplikacją.

Offline

 

#15  2008-12-27 11:56:40

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Programowanie w wxWidgets

już sobie poradziłem hehe co do QT to jakbym KDE używał bym był bardziej za ;) no ale że XFCE używam to wolę coś co koło GTK jest ;) Ale obiecuję że QT spróbuję ;P

Offline

 

#16  2008-12-28 03:19:39

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: Programowanie w wxWidgets

He he miałem dokładnie takie samo podejście ;p - to wszystko winda KDE - jakoś wszyscy (w tym ja - przynajmniej kiedyś) myślom QT=KDE i jest równie powolne - ale to nie ma jedno z drugim nic wspólnego - śmiem twierdzić że to gtk jest powolniejsze - co nie oznacza powolne - ale ok wxWidgets, Gtk czy QT - jak tylko umiesz napisać na tym co chcesz to nie widzę problemu (choć nadal radzę wypróbować Creatora tak dla świętego spokoju ;] )

Tyle ode mnie.

Pozdrawiam.

Offline

 

#17  2008-12-29 12:32:53

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Programowanie w wxWidgets

Wie ktoś jak w wxWidgets zrobić żeby memo powiększało się wraz z oknem?? Aha i jeszcze gdzie mogę poczytać jak zrobić aplikację MDI bo w necie też cisza ;/ Nie mogę nic znaleźć ciekawego na ten temat ;) Interesuje mnie TYLKO wxWidgets ;) pozdro Huk ;p

Offline

 

#18  2009-01-04 01:25:20

  giaur - Użytkownik

giaur
Użytkownik
Zarejestrowany: 2008-08-01

Re: Programowanie w wxWidgets

Hehe ktos tu sieje propagande. Samo wyswietlenie kontrolki to 1 linia a nie 30:

Kod:

wxButton *btn = new wxButton(this,100,"&OK");

nie ma w zasadzie możliwości żeby ci się plunął o bark jakiejś biblioteki „X” - bo QT nie jest sfragowane[/quote]
A co to znaczy "sfragowane"? W kazdym razie mylisz sie i to bardzo - to, ze akurat wersja .dev w repo to jedna biblioteka nie znaczy ze tak jest ZAWSZE - po prostu ten kto przygotowywal pakiety tak biblitoeke skompilowal - jako jedną monolityczną. Czy to dobrze - mozna dyskutowac, ma to swoje wady i zalety. I w wielu sytuacjach lepiej na przyklad linkowac tylko część biblioteki zamiast cała - bo nie linkujemy tych częsci, które nie są nam potrzebne, przez co aplikacja jest lżejsza i wydajniejsza. Na przykład, jezeli program nie uzywa wątków, to po co linkować klasy do obsługi wątków?

wxWidgets tez mozna skompilowac jako jedna monolityczna biblioteke lub kilka mniejszych, a nawet jako statyczna tak, ze program wynikowy wcale nie bedzie wymagac obecnosci wxWidgets w systemie - wystarczy GTK.

Wie ktoś jak w wxWidgets zrobić żeby memo powiększało się wraz z oknem??[/quote]
Jezeli Memo ma zajmowac cale okno (nie liczac menu), to nic nie musisz robic - wystarczy jak polozysz wxTextControl od razu na wxFrame (czyli obiekt klasy wxFrame to bezposrednio parent dla pola tekstowego. Uwaga: nie wxDialog, tylko wxFrame!). W innym przypadku uzywa sie sizerów. W zasadzie w Code::Blocks mozesz wszystko wyklikac i od razu skompilowac i uruchomic. JEzeli uzywasz wxDevCPP na wine to radze ci wyrzucic - Code::Blocks jest o niebo lepsze i nowsze - designer wspiera niektore kontrolki, których nie ma w wxDevCPP, obsluguje okna w plikach zasobów xrc.. poza tym wg mnie generuje lepszy i czytelniejszy kod niz wxDevCPP. No i jest to natywne IDE dzialajace pod Linuksem.

Aha i jeszcze gdzie mogę poczytać jak zrobić aplikację MDI bo w necie też cisza ;/[/quote]
Masz demo dołączone do wxWidgets, gdzie jest aplikacja MDI, z tym ze musisz wziac pod uwage, ze w GTK, a wiec i wxGTK nie ma pojęcia MDI. Więc zamiast okien MDI child będziesz mieć zakładki. Po prostu GTK nie obsluguje MDI, a wxGTK to nakladka na GTK.

Co do programowania w samym czystym GTK i Glade, to moge sie podpisac pod tym, co napisali poprzednicy :-)

Ostatnio edytowany przez giaur (2009-01-04 01:36:50)

Offline

 

#19  2009-01-13 17:48:44

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Programowanie w wxWidgets

Dzięki bardzo przydatne informacje ;) hehe ;) Przynajmniej wiem czego szukać ;)

Teraz mam taki problem że chcę wywołać swoje okienko. Więc zrobiłem nowy wxDialog (pliki BezNazwyDlg1.cpp, BezNazwyDlg1.h) i dodałem do pliku

Projekt2App.cpp

Kod:

//---------------------------------------------------------------------------
//
// Name:        Projekt2App.cpp
// Author:      kuba
// Created:     2009-01-08 22:44:25
// Description:
//
//---------------------------------------------------------------------------

#include "Projekt2App.h"
#include "Projekt2Frm.h"
#include "BezNazwyDlg1.h"


IMPLEMENT_APP(Projekt2FrmApp)

bool Projekt2FrmApp::OnInit()
{
    Projekt2Frm* frame = new Projekt2Frm(NULL);
    SetTopWindow(frame);
    frame->Show();
    return true;
}

int Projekt2FrmApp::OnExit()
{
    return 0;
}

Projekt2Frm.h (fragment)

Kod:

//---------------------------------------------------------------------------
//
// Name:        Projekt2Frm.h
// Author:      kuba
// Created:     2009-01-08 22:44:25
// Description: Projekt2Frm class declaration
//
//---------------------------------------------------------------------------

#ifndef __PROJEKT2FRM_h__
#define __PROJEKT2FRM_h__

#ifdef __BORLANDC__
    #pragma hdrstop
#endif

#ifndef WX_PRECOMP
    #include <wx/wx.h>
    #include <wx/frame.h>
#else
    #include <wx/wxprec.h>
#endif

//Do not add custom headers between
//Header Include Start and Header Include End.
//wxDev-C++ designer will remove them. Add custom headers after the block.


////Header Include Start
#include <wx/button.h>
#include <wx/sizer.h>
#include "BezNazwyDlg1.h"

////Header Include End

////Dialog Style Start
#undef Projekt2Frm_STYLE
#define Projekt2Frm_STYLE wxCAPTION | wxRESIZE_BORDER | wxSYSTEM_MENU | wxMINIMIZE_BOX | wxCLOSE_BOX
////Dialog Style End

i wypluwa mi taki błąd

Projekt2Frm.h BezNazwyDlg1.h: No such file or directory.

nie wiem co z tym zrobić plik istnieje i wszystko jest ok.

Drugie moje pytanie jak właściwie wywołać to okno?? Czy takie coś wystarczy?

Kod:

    BezNazwy1Dlg *custom = new BezNazwy1Dlg(wxT("CustomDialog"));
    custom->Show(true);

Offline

 

#20  2009-03-15 02:38:23

  giegiel - Członek DUG

giegiel
Członek DUG
Skąd: Chrzypsko Wielkie/Poznań
Zarejestrowany: 2006-04-15

Re: Programowanie w wxWidgets

Z tamtym nikt mi nie umiał pomóc to może na to ktoś poradzi :)

Deklaruję zmienną char *sc i wxChar *wsc. Teraz chcę z typu char do wxChar przepisac żeby dalej móc wykorzystywać wx'owe funkcję na tej zmiennej.

Kod:

    sc = getenv("HOME");
    strcpy(wxc, sc.c_str());

Taki błąd wypluwa:

Kod:

backuper_main.cpp: In member function ‘void backuper_main::CreateGUIControls()’:
backuper_main.cpp:82: error: request for member ‘c_str’ in ‘((backuper_main*)this)->backuper_main::sc’, which is of non-class type ‘char*’

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.013 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00005 SET NAMES latin2
0.00093 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.221.68.196' WHERE u.id=1
0.00074 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.221.68.196', 1732234717)
0.00057 SELECT * FROM punbb_online WHERE logged<1732234417
0.00056 SELECT topic_id FROM punbb_posts WHERE id=106669
0.00285 SELECT id FROM punbb_posts WHERE topic_id=12725 ORDER BY posted
0.00096 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=12725 AND t.moved_to IS NULL
0.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00102 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=12725 ORDER BY p.id LIMIT 0,25
0.00095 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=12725
Total query time: 0.00878 s