crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Программа падает при выходе из QMessageBox
Gambit
  опции профиля:
сообщение 2.8.2010, 17:00
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 12.6.2010
Пользователь №: 1802

Спасибо сказали: 0 раз(а)




Репутация:   0  


Программа, запущенная с флагами this->setWindowFlags (Qt::Tool | Qt::FramelessWindowHint);
падает после нажатия на OK в вызванном мессадж-боксе.
Код вызова стандартный:
msgBox.setIcon(QMessageBox::Information);
msgBox.setDetailedText("DETAILED TEXT");
msgBox.setWindowTitle("All OK");
msgBox.setInformativeText("Some Text");
msgBox.setText("SET_TEKAST");
msgBox.exec();

При отключении флагов, прога не падает, но мне нужно чтобы главное окно было без рамки и шапки.
Хелп.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 2.8.2010, 20:22
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


А отладчик чего говорит?

Исходные коды полностью можно посмотреть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maxvanceffer
  опции профиля:
сообщение 2.8.2010, 22:33
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 72
Регистрация: 30.5.2009
Из: Moldova
Пользователь №: 790

Спасибо сказали: 0 раз(а)




Репутация:   0  


А ты просто виджетом делай ....))) Или смотри что тебе возвращает метод exec
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Gambit
  опции профиля:
сообщение 3.8.2010, 11:00
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 12.6.2010
Пользователь №: 1802

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(SABROG @ 2.8.2010, 20:22) *
А отладчик чего говорит?

А ничего он не говорит )))
/home/gambit/network_demo_1-build-desktop/network_demo_1 завершился с кодом 0
Такое ощущение что кнопа ОК месаджбокса связана с ф-ей Quit() :blink:

Цитата(SABROG @ 2.8.2010, 20:22) *
Исходные коды полностью можно посмотреть?

Лёгко!

хидер
CODE
#ifndef NETWORKDEMO_H
#define NETWORKDEMO_H
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <QMainWindow>
#include <QMessageBox>

namespace Ui {
class networkdemo;
}

class networkdemo : public QMainWindow
{
Q_OBJECT

public:
networkdemo(QWidget *parent = 0);
~networkdemo();

private:
Ui::networkdemo *ui;
QMessageBox msgBox;

private slots:
void start_process(void);

};

#endif // NETWORKDEMO_H


сишка
CODE
#include "networkdemo.h"
#include "ui_networkdemo.h"

networkdemo::networkdemo(QWidget *parent) : QMainWindow(parent), ui(new Ui::networkdemo)
{
ui->setupUi(this);
this->setWindowFlags (Qt::Tool | Qt::FramelessWindowHint);
}

networkdemo::~networkdemo()
{
delete ui;
}

void networkdemo::start_process()
{
msgBox.setIcon(QMessageBox::Information);
msgBox.setDetailedText("DETAILED TEXT");
msgBox.setWindowTitle("All OK");
msgBox.setInformativeText("Transmited complete");
msgBox.setText("SET_TEKAST");
msgBox.exec();
}




меин
CODE
#include <QtGui/QApplication>
#include "networkdemo.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
networkdemo w;
w.showMaximized();

return a.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.8.2010, 11:51
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Похоже Qt Tool окна не считает за полноценные окна. Так будет работать, если указать родителя:

networkdemo::networkdemo(QWidget *parent) : QMainWindow(parent), ui(new Ui::networkdemo), msgBox(this)


И так будет работать, если родителя не указывать:

QApplication::setQuitOnLastWindowClosed(false);


По умолчанию setQuitOnLastWindowClosed = true. Видимо когда QMessageBox закрывается, то Qt думает, что это последнее окно.

Но после решений, что я написал выше возникает другая проблема - приложение остается висеть в процессах, слот close() для Tool окна почему-то не срабатывает. Аттрибут Qt::WA_DeleteOnClose тоже не помогает.
---
В общем, если дальше работать с Tool окном, то нужно взять за правило, что все Top Level окна должны иметь родителя. Затем прописать такое, чтобы корректно обрабатывать закрытие главного Tool окна:

void MainWindow::closeEvent(QCloseEvent *e)
{
    qApp->quit();
}



Сообщение отредактировал SABROG - 3.8.2010, 12:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 3.8.2010, 12:11
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


а что у тебя в "ui_networkdemo.h"? По-моему, тут собака зарыта.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Gambit
  опции профиля:
сообщение 3.8.2010, 12:49
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 12.6.2010
Пользователь №: 1802

Спасибо сказали: 0 раз(а)




Репутация:   0  


Трабл решил установкой флага Qt::FramelessWindowHint без Qt::Tool

Цитата(Анна @ 3.8.2010, 12:11) *
а что у тебя в "ui_networkdemo.h"? По-моему, тут собака зарыта.
Этот файлик автоматом при сборке генерит QtCreator на основе данных формы.
Там точно все ок. или это траблы разрабов :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 3.8.2010, 13:39
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


вот это и насторожило. у меня бы сгенерило

class networkdemo : public QMainWindow
{
Q_OBJECT
...
Ui::networkdemoClass *ui;
}

Потому и решила, что ты вручную писал. Впрочем, у меня не QtCreator.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 3.8.2010, 14:19
Сообщение #9


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Цитата(Gambit @ 3.8.2010, 13:49) *
Этот файлик автоматом при сборке генерит QtCreator на основе данных формы.

Его генерит не QtCreator а uic.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 22:58