У меня есть 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
вине Сегментация
Вы имеете в виду, что Cinammon падает, а не ваше приложение? Процесс Cinammon? Попробуйте запустить его с терминала и затем посмотреть, что он печатает после сбоя. – sashoalm
@sashoalm благодарит вас за вопрос. В терминале нет msg, поскольку приложение все еще работает. Plz проверить обновление 2. –
Нет, я имел в виду процесс Cinammon. Это тот, который падает, а не ваше приложение, верно? Что говорит STDOUT и STDERR? Запустите Cinammon с терминала. Убейте процесс и запустите его с терминала - 'killalll cinammon && cinammon'. – sashoalm