event或mousePressEvent函数适用于小部件内部,但我想在点击titleBar(menuBar的上半部分,包含关闭按钮等)时捕获。
我该怎么做?
答案 0 :(得分:1)
您可以覆盖nativeEvent,然后获取鼠标位置以与几何(排除窗口框架)和frameGeometry(包括窗口框架)进行比较,以检测它是否命中标题栏
bool MyClass::nativeEvent(const QByteArray & eventType, void * message, long * result)
{
MSG* msg = (MSG*)(message);
if (msg->message == WM_NCLBUTTONDOWN)
{
int mouseX = GET_X_LPARAM(msg->lParam);
int mouseY = GET_Y_LPARAM(msg->lParam);
QRect frame = frameGeometry();
QRect content = geometry();
qDebug() << "mouseX: " << mouseX << "mouseY:" << mouseY;
qDebug() << "frame: " << frame;
qDebug() << "content: " << content;
if (mouseY < content.y() && mouseY >= frame.y())
{
qDebug() << "Hit title bar";
}
}
*result = 0;
return false;
}
答案 1 :(得分:0)
这是PyQt的实现。
def repeat(s, number):
result = ''
for _ in range(0, number):
result += s
return result
print(repeat("Hi", 3))
我对此一无所知,如果我再次单击标题栏而不单击菜单,菜单会发生什么。 菜单消失了,这允许我单击时移动标题栏-很好...但是我不能可靠地将菜单备份