OS::win_xp_sp3
Qt::4.6
可以在QRect中使用QMouseEvent吗?我有父窗口小部件,里面是一些QLabel与文本“状态未变”。
此外,父窗口小部件内部是从QRect派生的MyRect。
现在我只想在这个MyRect中执行MouseEvent操作。例如,如果我在MyRect上操作,父小部件中的文本需要更改。
例如:
class MyRect : public QRect {
public:
MyRect(int x, int y, int w, int h, ParentWidget* parent)
: QRect(x,y,w,h)
{
itsParent = parent;
}
~MyRect() {}
protected:
void mouseMoveEvent(QMouseEvent* event)
private:
ParentWidget* itsParent
};
void MyRect::mouseMoveEvent(QMouseEvent* event)
{
if(event->buttons() == Qt::LeftButton)
{
itsparent->label->setText("status changed");
}
}什么都没发生
问::是否可以这样使用QMouseEvent (仅在QRect上)?
发布于 2010-12-09 20:14:37
QRect既不是QObject也不是QWidget,所以它不接收事件。它只有四个数字描述一个矩形(从它派生出来是没有意义的)。您可以在小部件的鼠标事件处理程序中检查某个点是否为给定的矩形。像这样:
void MyLabel::mouseMoveEvent( QMouseEvent* e ) {
if ( !rect.contains( e->pos() ) )
return;
//... handle mouse move
}子类化的另一种选择是using an event filter。
发布于 2010-12-09 20:15:08
是否可以像这样使用QMouseEvent (仅限在QRect上)?
不,至少不是你怎么做的。QRect不是QWidget,因此没有任何mouseEvent处理程序等等。它只是一个具有四个坐标的实体。
您可以通过将处理程序添加到实际的QWidget (通过子类化或使用installEventFilter)并在处理程序检查中使用QRect::contains(QPoint)在矩形中单击来执行您想要的操作。
https://stackoverflow.com/questions/4397656
复制相似问题