如何创建无焦点无边框响应鼠标事件的widget?

windless0530 2011-08-05 06:22:35
一个浮动于QTextEdit上的辅助窗口,要求无焦点(show的时候不影响输入)无边框,但是要响应鼠标事件。

目前代码如下:

this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_Disabled, false);
this->setAttribute(Qt::WA_TransparentForMouseEvents, false);
this->setFocusPolicy(Qt::NoFocus);
this->setMouseTracking(true);

只是无焦点无边框,但是鼠标无论也不响应,mousePressEvent进不去。上面的滚动条也点击无响应。

如何解决?

谢谢。
...全文
285 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
念茜 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hitxiaya 的回复:]

我也用了Qt::FramelessWindowHint, 点击鼠标拖动什么的就没有用了,重写了dragMoveEvent也没有效果,不知道怎么解决。
[/Quote]

解决办法是:

void yourwindow::mousePressEvent(QMouseEvent *event){
this->windowPos = this->pos();
this->mousePos = event->globalPos();
this->dPos = mousePos - windowPos;
}

void yourwindow::mouseMoveEvent(QMouseEvent *event){
this->move(event->globalPos() - this->dPos);
}
lelexin 2011-10-25
  • 打赏
  • 举报
回复
额 来学习下
Inhibitory 2011-10-24
  • 打赏
  • 举报
回复
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
FramelessWidget w;
w.setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
w.setFocusPolicy(Qt::NoFocus);
w.setAttribute(Qt::WA_Disabled, false);
w.setAttribute(Qt::WA_TransparentForMouseEvents, false);
w.show();

return a.exec();
}

这些东西我全用了,一样可以接受鼠标事件的,很奇怪
hitxiaya 2011-10-24
  • 打赏
  • 举报
回复
我也用了Qt::FramelessWindowHint, 点击鼠标拖动什么的就没有用了,重写了dragMoveEvent也没有效果,不知道怎么解决。
dxms8 2011-08-23
  • 打赏
  • 举报
回复
我记得Qt::FramelessWindowHint会导致窗口非active,无法接受按键事件。
lz要无边框的话还是换个方法吧~
windless0530 2011-08-22
  • 打赏
  • 举报
回复
这么久了没人回答?自顶一下……

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧