核心提示:先要清楚,只是拖动mainwindow你是拖不动那个界面的,但是又想要设计漂亮的无标题栏的控件时,那就需要加自己的重写函数了一开始我被这个东西给吓到了,因为在网上看了很多人的文章,但是发现我找不到他们...
先要清楚,只是拖动mainwindow你是拖不动那个界面的,但是又想要设计漂亮的无标题栏的控件时,那就需要加自己的重写函数了
一开始我被这个东西给吓到了,因为在网上看了很多人的文章,但是发现我找不到他们是怎么让这个类知道event的,因为大家都是只写了几个类函数,但是就这么结束了???exm???
壮胆在QT上写下了那个函数名。结果发现那玩意是可以突然变成了斜体!!!
就像这样
这时我就意识到了,这玩意会不会是在基类上定义了模板函数的…我们就直接覆盖掉了原来的那个函数,其实内部实现的时候,会检测到东西的。只不过以前的版本(基类)中,这个函数很可能是个虚函数还是什么的,所以….(好吧,其实还有可能在于使用了event作为参数)
带着这份猜测,我写看懂了网上的很多代码之后,写下下面这段代码
mMoving : bool值,判断鼠标是否移动
mLastMousePosition: QPoint类型,记录以前的位置
思路其实很简单:
1. 当按下鼠标左键的时候,将鼠标移动给激活起来。同时记录当前位置的坐标
2. 要表现那种拖动,我们就要记录鼠标是否还在被拖动中。那只要mMoving是True我们就知道鼠标还在拖动中。否则我们肯定是会检测到鼠标松动(release)那么mMoving就被设置为了False。那也就不是移动的状态了。
3. 其实学好了这个还可以改写其他的类,这样就可以使得所有的类都可以被设置为可以拖动的状态了(当然啦,是可拖动,就拖动整个框)
void QuickSearch::mouseMoveEvent(QMouseEvent* event){ if (mMoving) { this->move(this->pos() + (event->globalPos() - mLastMousePosition)); mLastMousePosition = event->globalPos(); } } void QuickSearch::mousePressEvent(QMouseEvent* event){ if (event->button() == Qt::LeftButton) { mMoving = true; mLastMousePosition = event->globalPos(); } } void QuickSearch::mouseReleaseEvent(QMouseEvent* event){ mMoving = false; }