[C++ z Qt] mousePressEvent nie otrzymuje wszystkich klikniec

0

Hej Bracia

mam kłopot-po reimplementacji funkcji mousePressEvent() w klasie pochodnej od QWidget nie otrzymuję komunikatów od myszy,jeśli współrzędna y kliknięcia jest mniejsza niż około 79.
Klasa ta jest ustawiona jako child QScrollArea,które z kolei jest częścią składową Ui klasy QMainWindow.
Wie ktoś może,czym to może być spowodowane?

0

Najprawdopodobniej jeden z Widget-ów z tego samego regionu zjada ci te Eventy (mimo, że ich nie wykorzystuje). W takim wypadku, najlepiej w tym trefnym widget-cie wstawić linijkę (w obsłudze zdarzeń mousePressEvent itp):

event->setAccepted ( false );
0

hmmmm no ja rozumiem Marku,że jakiś inny widget mógłby zjadać mi eventa,ale jeśli już to chyba by to na całym obszarze mojego widgeta robił,a nie tylko na kawałku??
btw,oto kod:

void Plane::mousePressEvent(QMouseEvent *e)
{
	e->accept();
	if(e->button()==Qt::LeftButton)
	{
		QMap<QString,Robot*>::iterator it=robots.begin();
		int x,y;
		int mx=e->pos().x(),my=e->pos().y();
		QMessageBox::information(this,0,QString::number(mx)+"\n"+QString::number(my),"Ok");

		while(it!=robots.end())
		{
			x=(*it)->x;
			y=(*it)->y;
			if((mx>=(x-8) && mx<=(x+11)))
				if((my<=(y+9) && my<=(y-9)))
			{
				selectedRobot=it.key();
				update();
				return;
			}
			it++;
		}
	}
	else QWidget::mousePressEvent(e);
}
0

Właśnie miałem dokładnie taki problem: na jednym Widget-cie miałem (co najmniej) parę pod Widget-ów, która się częściowo przykrywała (nie łączyła ich relacja rodzic dziecko). Jeden Widget z tej pary nie dostawał w eventów z przykrywającego się obszaru.
Oczywiście jeśli ty nie masz takiej pary, to nie wiem w czym problem.

0

hmmm może tak:
mam ową klasę Plane:public QWidget,która jest planszą rysującą siatkę po której poruszają się roboty klasy Robot:public QWidget
Wszystkie te roboty są childami Plane'a.
Ale,nawet jeśli nie ma żadnego robota na planie,to kliknięcie w pozycję planu o y<79 NIE DAJE komunikatu QMessageBox widocznego w kodzie z mego poprzedniego postu,czyli że widget nie otrzymał eventa-to właśnie jest problem.

Ów plan ponadto jest ustawiany poprzez QScrollArea::setWidget(),area zaś jest częcią składową okna uzyskaną poprzez uzycie designera i odpalenie funkcji setupUi()

1 użytkowników online, w tym zalogowanych: 0, gości: 1