1

QMainWindowWindows フラグを に設定していますX11BypassWindowManagerHintQPushButtonをトリガーするウィンドウにがありますQFileDialog。イベントがトリガーされると、cinnamon がクラッシュします。フラグが削除されると、クラッシュは発生しません。ウィンドウは常に上にある必要があることに注意してください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' が失敗しました

ウィンドウ マネージャーの警告: バグのあるクライアントが、タイムスタンプが 0x20000b7 の _NET_ACTIVE_WINDOW メッセージを送信しました

セグメンテーション違反

4

1 に答える 1

0

最後に、これに対する答えを見つけました。デバッグプロセスを案内してくれた@sashoalmに感謝しなければなりませんが、それはシナモンのバグではないと思います.

ファイルを開く呼び出し:に変更するQFileDialog::getOpenFileName(this, tr("Open SRT File"), "/home", tr("SRT Files (*.srt)"));と、問題は解決します。おそらく、ウィンドウはダイアログの親になることはできません。this0Qt::X11BypassWindowManagerHint

于 2015-02-17T17:04:49.110 に答える