nik*_*_02 2 c++ qt visual-studio-2008
OS :: win_xp_sp3
Qt的:: 4.6
可以在QRect中使用QMouseEvent吗?我有父小部件,里面是一些QLabel文本"状态不变".
此外,内部父窗口小部件是MyRect,它是从QRect派生的.
现在我想MouseEvent只在这个MyRect中运行.例如,如果我在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");
}
}
Run Code Online (Sandbox Code Playgroud)
什么都没发生
问题::是否可以像这样使用QMouseEvent(仅限QRect)?
QRect既不是QObject也不是QWidget,因此它不接收事件.它只是描述一个矩形的四个数字(从它衍生出来没有意义).您可以检查点是否是窗口小部件的鼠标事件处理程序中的给定rect.喜欢:
void MyLabel::mouseMoveEvent( QMouseEvent* e ) {
if ( !rect.contains( e->pos() ) )
return;
//... handle mouse move
}
Run Code Online (Sandbox Code Playgroud)
子类化的替代方法是使用事件过滤器.