在LeaveEvent之后的Qt setCursor问题

时间:2015-12-29 22:45:14

标签: c++ qt

我正在使用QWidget::setCursor方法,但是在QMessageBox弹出窗口之后,在某些情况下它会暂时恢复到旧光标(直到我使其“刷新”并再次加载覆盖光标)

模式似乎是如果退出消息框并将光标放在其框架之外(例如,使用Escape键),则光标消失。另一方面,如果退出消息框并将光标放在其框架内,则覆盖光标将返回。

我尝试通过继承QWidget并覆盖enterEventleaveEvent来自行调试。有趣的是,当出现对话框时,主窗口小部件上会触发leaveEvent,但只有当关闭对话框时光标位于消息框框内时才会触发下一个enterEvent。否则,不会看到enterEvent

如何才能获得总是返回覆盖光标?

标题文件:

#include <QtWidgets>
class Widget : public QWidget {
    Q_OBJECT
public:
    Widget(QWidget *parent = 0);
    void enterEvent(QEvent *);
    void leaveEvent(QEvent *);
};

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
public slots:
    void popup();
};

源文件:

#include <QtWidgets>

#include "main.h"

Widget::Widget(QWidget *parent) : QWidget(parent) { }
void Widget::enterEvent(QEvent * e) {
    puts("Widget::enterEvent"); QWidget::enterEvent(e);
}
void Widget::leaveEvent(QEvent * e) {
    puts("Widget::leaveEvent"); QWidget::leaveEvent(e);
}

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
    Widget * widget = new Widget(this);
    widget->setMinimumSize(500, 500);
    widget->setCursor(Qt::CrossCursor);
    setCentralWidget(widget);
    connect(new QShortcut(QKeySequence("A"),this),SIGNAL(activated()),
            this,SLOT(popup()));
}

void MainWindow::popup() {
    QMessageBox::question(
            this, "Test", "Test", QMessageBox::Yes|QMessageBox::No);
}

int main(int argc, char *argv[]) {
    QApplication app(argc,argv);
    MainWindow thewindow;
    thewindow.show();
    int re = app.exec();
    return re;
}

0 个答案:

没有答案