Qt X11BypassWindowManagerHint打开QFileDialog崩溃

时间:2015-02-17 08:12:21

标签: qt qt5 x11 cinnamon

我有QMainWindow,其中Windows标记设置为X11BypassWindowManagerHint。窗口中有QPushButton触发QFileDialog。当事件被触发时,肉桂会崩溃。删除标志后,不会发生崩溃。请注意,窗口必须始终保持在最顶层,这就是X11BypassWindowManagerHint必须使用的原因。

知道是什么导致了崩溃吗?尚未在其他X11系统/ Windows上测试过。

我的配置: Linux Mint 17.1 x64 with Cinnamon,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)"));

}

更新2: 当它崩溃时,将会有一个系统对话框,说“Cinnamon刚刚崩溃。你现在正在以后备模式运行。你想重新启动Cinnamon吗?”请注意,应用程序没有崩溃并退出。相反,它正在运行,只是不在顶部而且没有响应UI交互。

更新3: 感谢sashoalm的建议,我现在可以从终端看到Cinnamon的输出。按下按钮后,终端附加

  

窗口管理器警告:日志级别8:meta_window_unminimize:断言'!window-> override_redirect'失败

     

窗口管理器警告:Buggy客户端发送了一条_NET_ACTIVE_WINDOW消息,其时间戳为 - 对于0x20000b7

     

分段错误

1 个答案:

答案 0 :(得分:0)

最后我找到了答案。我必须感谢@sashoalm带领我完成调试过程,但我想这不是一个肉桂的错误。

在打开的文件调用中:QFileDialog::getOpenFileName(this, tr("Open SRT File"), "/home", tr("SRT Files (*.srt)"));当我将this更改为0时,问题就解决了。可能是Qt::X11BypassWindowManagerHint的窗口不能是对话框的父窗口。