crossplatform.ru

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


  Ответ в Программа падает при выходе из QMessageBox
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
molchanoviv Дата 3.8.2010, 14:19
 
Цитата(Gambit @ 3.8.2010, 13:49) *
Этот файлик автоматом при сборке генерит QtCreator на основе данных формы.

Его генерит не QtCreator а uic.
Анна Дата 3.8.2010, 13:39
  вот это и насторожило. у меня бы сгенерило

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

Потому и решила, что ты вручную писал. Впрочем, у меня не QtCreator.
Gambit Дата 3.8.2010, 12:49
  Трабл решил установкой флага Qt::FramelessWindowHint без Qt::Tool

Цитата(Анна @ 3.8.2010, 12:11) *
а что у тебя в "ui_networkdemo.h"? По-моему, тут собака зарыта.
Этот файлик автоматом при сборке генерит QtCreator на основе данных формы.
Там точно все ок. или это траблы разрабов :)
Анна Дата 3.8.2010, 12:11
  а что у тебя в "ui_networkdemo.h"? По-моему, тут собака зарыта.
SABROG Дата 3.8.2010, 11:51
  Похоже 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();
}

Gambit Дата 3.8.2010, 11:00
 
Цитата(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();
}
maxvanceffer Дата 2.8.2010, 22:33
  А ты просто виджетом делай ....))) Или смотри что тебе возвращает метод exec
SABROG Дата 2.8.2010, 20:22
  А отладчик чего говорит?

Исходные коды полностью можно посмотреть?
Gambit Дата 2.8.2010, 17:00
  Программа, запущенная с флагами 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();

При отключении флагов, прога не падает, но мне нужно чтобы главное окно было без рамки и шапки.
Хелп.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 21:21