2015-02-17 3 views
1

У меня есть QMainWindow с установленным флагом окна X11BypassWindowManagerHint. В окне есть QPushButton, вызывающий QFileDialog. Когда событие будет запущено, корица начнет сбой. Когда флаг будет удален, авария не будет. Обратите внимание, что окно всегда должно оставаться на вершине, и именно поэтому X11BypassWindowManagerHint является обязательным.Qt X11BypassWindowManagerHint open QFileDialog crash

Любая идея, что вызывает крушение? Не тестировалось на других системах X11/Windows.

Мой конфиг: Linux Mint 17,1 x64 с корицей, Qt5.4

Большое спасибо!

Update 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)")); 

} 

Update 2: Когда он выходит из строя, будет диалог системы, говоря «Cinnamon только что врезались Вы в настоящее время работает в аварийном режиме. Вы хотите перезапустить Cinnamon? " Обратите внимание, что приложение не вышло из строя и не вышло. Вместо этого он работает, просто не сверху и не реагирует на взаимодействие с пользовательским интерфейсом.

Update 3: Благодаря предложению sashoalm, я могу теперь видеть выход корицей из терминала. После нажатия кнопки, терминал добавляется с предупреждением менеджер

Window: бревенчатый Уровень 8: meta_window_unminimize: утверждение не удалось

Окно предупреждения менеджера 'window-> override_redirect!': Buggy клиент отправил сообщение _NET_ACTIVE_WINDOW с отметка о времени из - за 0x20000b7

вине Сегментация

+0

Вы имеете в виду, что Cinammon падает, а не ваше приложение? Процесс Cinammon? Попробуйте запустить его с терминала и затем посмотреть, что он печатает после сбоя. – sashoalm

+0

@sashoalm благодарит вас за вопрос. В терминале нет msg, поскольку приложение все еще работает. Plz проверить обновление 2. –

+1

Нет, я имел в виду процесс Cinammon. Это тот, который падает, а не ваше приложение, верно? Что говорит STDOUT и STDERR? Запустите Cinammon с терминала. Убейте процесс и запустите его с терминала - 'killalll cinammon && cinammon'. – sashoalm

ответ

0

Наконец, я нашел ответ на этот вопрос. Я должен поблагодарить @sashoalm за то, что он провел меня через процесс отладки, но я думаю, что это не совсем ошибка корицы.

При вызове открытого файла: QFileDialog::getOpenFileName(this, tr("Open SRT File"), "/home", tr("SRT Files (*.srt)")); проблема решена при изменении this на 0. Вероятно, окно с Qt::X11BypassWindowManagerHint не может быть родителем диалогового окна.

Смежные вопросы