LINUX.ORG.RU

wxWidgets маленький вопрос


0

1

Доброго времени суток, что-то я немного запарился и не догоняю одну вещь. Есть фрейм(wxFrame), у которого есть статусбар(wxStatusBar). Также есть мой собственный класс(PaintArea) унаследованный от wxScrolledWindow и положенный на этот фрейм. Теперь мне нужно, чтобы когда мышка летала над мои PaintArea, в статусбаре фрейма отображались координаты мышки. Вроде как просто, но не понимаю как. Из родителя цепляться к событию EVT_MOTION дочернего виджета(PaintArea)? Или в дочернем виджете, в событии перемещения мышки, получать родителя, у него статусбар и писать на него, так правильнее?

★★★★★

в дочернем виджете, в событии перемещения мышки, получать родителя, у него статусбар и писать на него

Или используй wxFrame::SetStatusBar/wxFrame::SetStatusText

anonymous
()
Ответ на: комментарий от anonymous

Т.е мне сначала получить объект фрейма родителя типа

wxFrame * frame = ::FindWindow(ID_MAINFRAME);
//а потом
frame->SetStatusText(...)
Так? Т.е из обработчика дочернего виджета берём фрейм родителя и обращаемся к его методам. Это по фен-шую?

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

из обработчика дочернего виджета берём фрейм родителя и обращаемся к его методам

Ну да, типа того. Только зачем ::FindWindow? Можно GetParent(), если по-простому.

Или что-то типа такого:

class main_frame : public wxFrame
{
/* ... */
  wxStatusBar *status_bar;
};

class paint_area : public wxScrolledWindow
{
  main_frame *mf;
/* ... */
  paint_area::paint_area(main_frame *_mf) : mf(_mf), /*...*/
  {
  }
};

И дальше в paint_area уже используешь mf->status_bar или что там.

Это по фен-шую?

Делай как кажется проще, все эти фен-шуи у всех разные и постоянно меняются

anonymous
()
Ответ на: комментарий от trex6

Я подцеплял событие движения мышки над дочерним окном к обработчику в родителе, но не заработало, поэтому и спросил, что тут нужно «докурить»?

// в конструкторе фрейма-родителя, в который вложена моя PaintArea
Connect(ID_PAINT_AREA, wxEVT_MOTION, wxMouseEventHandler(DrawFrame::OnMotion));
xterro ★★★★★
() автор топика
Последнее исправление: xterro (всего исправлений: 2)
Ответ на: комментарий от trex6

Ах как же замечательно решается эта задача на сигналах-слотах

А как? Можно кусочек, который из слота изменяет текст на status bar'e? Что-то мне кажется будет то же самое, не? Насколько я понял вопрос в том как лучше в обработчик (слот) какого-то подокна передать status bar из родительского фрейма.

Их у вас нет?

Да там приблизительно так же, только без moc, обычными макросами или Connect()

anonymous
()
Ответ на: комментарий от anonymous

Из «дочернего виджета(PaintArea)» шлется сигнал типа
signals:
void mouseCoordinate( QString text);

И целпяеnся к слоту StatusBar::setText( QString text);

trex6 ★★★★★
()
Последнее исправление: trex6 (всего исправлений: 1)

Оффтоп: переходи на Qt 5.1. Я когда-то писал на wxWidgets, а теперь понял что Qt многократно продуктивнее.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

У меня к Qt нелюбовь какая-то, не знаю почему, просто на уровне чувств. В своё время начинал с MFC, после неё в wxWidgets, всё какое-то родное и знакомое :)

xterro ★★★★★
() автор топика
Ответ на: комментарий от trex6

А. Ну wxWidgets умеет приблизительно так же. В дочернем виджете делаем Connect() к функции из main_frame, а там уже обрабатываем мышиные перемещения.

xterro, ты вот это читал?

http://wxwidgets.blogspot.com/2007/01/in-praise-of-connect.html

Но вообще правильно тебе пишут, wxWidgets умирает, имеет смысл посматривать на Qt

anonymous
()
Ответ на: комментарий от xterro

Совершенно напрасно. Я после wxWidgets с удовольствием на Qt переполз. Никаких отрицательных эмоций, только осознание эффективности и скорости написания программ, парадигма сигналов-слотов.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

А разве «Connect» в WX не тоже самое? Имхо те же яйца, вид сбоку )

xterro ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Почему вы считаете что он умирает? Имхо вполне развивается, скоро глядишь, 3-я версия выйдет )

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

В своё время начинал с MFC...

Вот так вот микровраг отравляет умы людей, которые могли бы стать хорошими программистами.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Отчего уж. MFC конечно не идеальна, но это же всего лишь рабочий инструмент, на котором тем не менее можно делать вполне годные вещи, были бы руки ровные :)

xterro ★★★★★
() автор топика
Последнее исправление: xterro (всего исправлений: 2)
Ответ на: комментарий от xterro

Я с ней плотно познакомится не успел, только видел в чужом коде портянки из квадратных скобочек.

Но даже сами представители M$ говорили на одной из конференций, что MFC - говно и они это наконец поняли, создав MPF. Конечно, им надо было впарить новый продукт, но зал их поддерживал.

trex6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.