1

我有一个QMainWindow带有 windows 标志的设置为X11BypassWindowManagerHint. 窗口中有一个QPushButton触发QFileDialog. 当事件被触发时,肉桂会崩溃。当标志被移除时,不会发生崩溃。请注意,窗口必须始终保持在顶部,这就是X11BypassWindowManagerHint必须的原因。

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

我的配置:Linux Mint 17.1 x64 和 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 消息,其时间戳为 - for 0x20000b7

分段故障

4

1 回答 1

0

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

在打开文件调用中:QFileDialog::getOpenFileName(this, tr("Open SRT File"), "/home", tr("SRT Files (*.srt)"));当我更改this0. 可能一个窗口Qt::X11BypassWindowManagerHint不能是对话框的父级。

于 2015-02-17T17:04:49.110 回答