我们如何通过在窗口客户区按住鼠标来移动窗口。如何创建一个窗口,以便在窗口客户区按住鼠标指针时,我们可以移动窗口?
回答
使用QWidget::move()
来移动窗口。您检测用户何时按下(使用mousePressEvent()
)并保持(使用mouseMoveEvent()
)鼠标并使用这些增量值相应地移动窗口的左上角。
握住鼠标意味着在mousePressEvent()
中设置一个标志并检查该标志是否在mouseMoveEvent()
中设置。通过调用globalPos()
的QMouseEvent
传递来获取光标的位置并保存,以便您知道调用mouseMoveEvent()
之间的最后一个光标位置。然后计算最后位置和当前位置之间的差异,并将窗口移动到三角距离。
举个例子,这些添加到您的窗口类:
class Window : public QWidget {
// ..
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private:
bool down;
QPoint lastPos;
};
而且一个方法来实现它们是:
void Window::mousePressEvent(QMouseEvent *event) {
if (event->button() == Qt::LeftButton) {
down = true;
lastPos = event->globalPos();
}
QWidget::mousePressEvent(event);
}
void Window::mouseReleaseEvent(QMouseEvent *event) {
down = false;
QWidget::mouseReleaseEvent(event);
}
void Window::mouseMoveEvent(QMouseEvent *event) {
if (down) {
QPoint curPos = event->globalPos();
if (curPos != lastPos) {
QPoint diff = (lastPos - curPos);
move(pos() - diff);
lastPos = curPos;
}
}
QWidget::mouseMoveEvent(event);
}
现在左点击并按住在客户区移动窗口周围。
你不需要'QCursor :: POS()',使用'QMouseEvent :: globalPos()'相反,它是已经传递给鼠标事件处理程序。 – Mat
当然可以。 :) –
我没有清楚这一点。其实我的问题是,通过在标题栏中放置窗口,我们可以将窗口移动到桌面上的任何位置,就像这样,我们可以通过将它放在窗口客户区中来实现此目的。我们可以通过您所说的来实现此目的吗? – user896036
#include <windows.h>
void LeftClick ();
int main(){
Sleep(3000);
LeftClick(); //holds 5 sec.
}
void LeftClick ()
{
INPUT Input={0};
// left down
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1,&Input,sizeof(INPUT));
// left up
Sleep(5000); //this line is delaying key up ******
::ZeroMemory(&Input,sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1,&Input,sizeof(INPUT));
}
- 1. 如何隐藏在gvim窗口中移动鼠标指针
- 2. 是否可以在JavaFX2的主窗口区域中创建多个子窗口?
- 3. WinAPI:创建一个窗口与指定的客户区大小
- 4. 我们可以向窗口服务发送窗口消息吗
- 5. 在Flash中创建可移动窗口
- 6. 创建按钮来移动WPF窗口
- 7. 创建一个只能在父窗口内拖动的窗口
- 8. Python PyQt:如何使用鼠标在窗口上移动窗口小部件?
- 9. 创建后,我可以创建一个X11窗口OpenGL吗?
- 10. 如何模拟鼠标同时在多个窗口中移动?
- 11. 如何创建一个箭头指向另一个窗口的窗口?
- 12. Web:在窗口内创建窗口
- 13. 以编程方式滚动窗口移动窗口
- 14. 我可以在另一个窗口中插入一个窗口吗?
- 15. 创建GUI窗口,如c窗口中的向导窗口#
- 16. 弹出窗口和一个鼠标退出窗口
- 17. 我可以使用该窗口内的对象移动窗口吗?
- 18. 在移动窗口
- 19. 当用户移动窗口时,PushFrame锁定WPF窗口
- 20. 可可限制窗口移动区域?
- 21. 如何从窗口移动事件中移动窗口?
- 22. 如何创建有两个按钮的窗口将打开一个新窗口
- 23. 如何创建ExtJS5可拖动窗口?
- 24. C#创建窗口 - 定义父窗口
- 25. C++ WINAPI:客户区父窗口模糊子选项卡窗口
- 26. 何时创建qt窗口?
- 27. 如何打开一个新窗口,将鼠标放在较旧的窗口上
- 28. 如何创建一个可以调整窗口大小的div?
- 29. 窗口在窗口
- 30. 在现有窗口中创建一个新窗口
可能重复:http://stackoverflow.com/q/1361132/894321 – alexisdm