Qt X11BypassWindowManagerHint 打开QFileDialog 崩溃
Qt X11BypassWindowManagerHint open QFileDialog crash
我有一个 QMainWindow
,windows 标志设置为 X11BypassWindowManagerHint
。 window中有一个QPushButton
触发了一个QFileDialog
。当事件被触发时,肉桂会崩溃。移除标志后,将不会发生崩溃。请注意 window 需要始终保持在顶部,这就是为什么 X11BypassWindowManagerHint
是必须的。
知道是什么导致了崩溃吗?尚未在其他 X11 系统上测试/windows。
我的配置:
Linux Mint 17.1 x64 肉桂色,Qt5.4
非常感谢!
更新 1:
这是代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
...
Qt::WindowFlags flags = this->windowFlags();
this->setWindowFlags(flags | Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint);
...
connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(openFileDialog()));
}
void MainWindow::openFileDialog(){
QString file1Name = QFileDialog::getOpenFileName(this,
tr("Open SRT File"), "/home", tr("SRT Files (*.srt)"));
}
更新二:
当它崩溃时,会有一个系统对话框说“Cinnamon 刚刚崩溃了。你现在 运行 处于回退模式。你想重新启动 Cinnamon 吗?”请注意,应用程序没有崩溃和退出。相反,它是 运行,只是不在顶部并且不响应 UI 交互。
更新 3:
感谢 sashoalm 的建议,我现在可以从终端看到 Cinnamon 的输出。按下按钮后,终端附加
Window manager warning: Log level 8: meta_window_unminimize: assertion '!window->override_redirect' failed
Window manager warning: Buggy client sent a _NET_ACTIVE_WINDOW message with a timestamp of - for 0x20000b7
Segmentation fault
终于找到了答案。我必须感谢@sashoalm 引导我完成调试过程,但我想这不完全是肉桂的错误。
在打开的文件调用中:QFileDialog::getOpenFileName(this,
tr("Open SRT File"), "/home", tr("SRT Files (*.srt)"));
当我将this
更改为0
时问题就解决了。可能 window 和 Qt::X11BypassWindowManagerHint
不能成为对话的父级。
我有一个 QMainWindow
,windows 标志设置为 X11BypassWindowManagerHint
。 window中有一个QPushButton
触发了一个QFileDialog
。当事件被触发时,肉桂会崩溃。移除标志后,将不会发生崩溃。请注意 window 需要始终保持在顶部,这就是为什么 X11BypassWindowManagerHint
是必须的。
知道是什么导致了崩溃吗?尚未在其他 X11 系统上测试/windows。
我的配置: Linux Mint 17.1 x64 肉桂色,Qt5.4
非常感谢!
更新 1: 这是代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
...
Qt::WindowFlags flags = this->windowFlags();
this->setWindowFlags(flags | Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint);
...
connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(openFileDialog()));
}
void MainWindow::openFileDialog(){
QString file1Name = QFileDialog::getOpenFileName(this,
tr("Open SRT File"), "/home", tr("SRT Files (*.srt)"));
}
更新二: 当它崩溃时,会有一个系统对话框说“Cinnamon 刚刚崩溃了。你现在 运行 处于回退模式。你想重新启动 Cinnamon 吗?”请注意,应用程序没有崩溃和退出。相反,它是 运行,只是不在顶部并且不响应 UI 交互。
更新 3: 感谢 sashoalm 的建议,我现在可以从终端看到 Cinnamon 的输出。按下按钮后,终端附加
Window manager warning: Log level 8: meta_window_unminimize: assertion '!window->override_redirect' failed
Window manager warning: Buggy client sent a _NET_ACTIVE_WINDOW message with a timestamp of - for 0x20000b7
Segmentation fault
终于找到了答案。我必须感谢@sashoalm 引导我完成调试过程,但我想这不完全是肉桂的错误。
在打开的文件调用中:QFileDialog::getOpenFileName(this,
tr("Open SRT File"), "/home", tr("SRT Files (*.srt)"));
当我将this
更改为0
时问题就解决了。可能 window 和 Qt::X11BypassWindowManagerHint
不能成为对话的父级。