我正在使用QWidget::setCursor
方法,但是在QMessageBox
弹出窗口之后,在某些情况下它会暂时恢复到旧光标(直到我使其“刷新”并再次加载覆盖光标)
模式似乎是如果退出消息框并将光标放在其框架之外(例如,使用Escape键),则光标消失。另一方面,如果退出消息框并将光标放在其框架内,则覆盖光标将返回。
我尝试通过继承QWidget
并覆盖enterEvent
和leaveEvent
来自行调试。有趣的是,当出现对话框时,主窗口小部件上会触发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;
}