c++ - 设置 Qt::FramelessWindowHint 时 QMessageBox 中的触摸坐标偏移
问题描述
我发现只要设置了 Qt::FramelessWindowHint 窗口标志,我的 QMessageBox 就没有响应触摸事件。清除后,对话框会正常响应。
经过一些额外的测试,我发现触摸确实可以工作,但是它将按钮的坐标注册在窗口的错误位置。QMessageBox 在屏幕中央绘制,但似乎操作系统认为对话框位于屏幕的左上角。(例如,我必须触摸消息框的左上角才能单击实际位于窗口中心底部的按钮)。
我的猜测是窗口的触摸校准发生了一些事情。有没有办法调整这个来补偿?
有谁知道可行的解决方法?我正在开发我的 Qt 应用程序以在 Raspberry PI 3 上运行。我需要一些方法来抵消坐标偏移,或者我需要一种不同的方法来使窗口看起来无框(我不希望显示标题栏和按钮在顶部)。
对于那些有兴趣重现问题的人。你可以运行这个简单的代码来看看效果:
测试应用:
主文件
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMessageBox box;
box.setText("box");
box.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
box.setWindowFlags(Qt::FramelessWindowHint);
box.exec();
}
MainWindow::~MainWindow()
{
delete ui;
}
这个例子可以很好地使用鼠标关闭对话框,但使用触摸,它不起作用。
注意: Qt 提交了一个关于此问题的错误。上面的代码示例取自错误报告。这是感兴趣的人的链接: QTBUG-47474:无框 QMessageBox:按钮无法通过触摸屏使用
解决方案
推荐阅读
- python - python中递归函数的问题
- c# - 在视图之间切换 wpf 窗口的最佳方法是什么?
- javascript - 为什么即使我使用了 useEffect 我的组件也不会重新渲染自己?(React.js)
- arrays - 获取循环 Swift 的当前位置
- mysql - 我的 SQL:如何返回仅显示第一天观看的电影的不同记录(电影)的计数
- python - 如何为 Windows 的 Anaconda 和 Spyder 5 重新创建快捷方式?
- php - 从使用php登录的用户获取数据到html表中
- javascript - 输入类型号里面带加号、减号或“e”显示为空值,为什么?
- c++ - 将 linux 项目迁移到 Visual Studio 时在 cmake 中加载包
- flutter - 在颤动中从孩子修改父数据