Russian Qt Forum
Октябрь 01, 2024, 00:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT 4.2.2 Глюки программы при вызове connect  (Прочитано 3145 раз)
evilguard
Гость
« : Февраль 12, 2007, 21:30 »

http://qtprojects.narod.ru/test.rar (50кб)
Выложил тестовую пустую программку, потому что описать ошибки здесь трудно, пожалуйста помогите. В ней два класса, потомки QObject, абсолютно одинаковые, различаются только именем класса, в них объявлен одноименный сигнал, sos(int), в прочем там все есть.
Конструктор для QMainWindow:
Код:

test::test(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);

progressBar = new QProgressBar();
statusBar()->addWidget(progressBar);
progressBar->setMinimum(0);
progressBar->setMaximum(2000);
MGrid *grid;
MPoints *points;
connect(grid, SIGNAL(sos(int)), progressBar, SLOT(setValue(int)));
}

Вышеописанные классы - MGrid И MPoints. Абсолютно одинаковые. При задании в качестве параметра в функции connect объекта points - вылезает одна ошибка на стадии выполнении программы - "Unhandled exception at 0x0012ffe0 ...", а при задании объекта grid - другая: ""A buffer overrun has occured in test.exe which has corrupted the program's internal state". Но классы ведь одинаковые??! Ошибку не вижу в упор, вот листинги классов MGrid и MPoints:
Код:

// -----------------------MPoints----------------------
#include <QObject>

class MPoints : public QObject
{
Q_OBJECT
public:
MPoints();
~MPoints();
void func2();
signals:
void sos(int value);
};


Код:

//--------------------------MGrid---------------------------
#include <QObject>

class MGrid : public QObject
{
Q_OBJECT
public:
MGrid();
~MGrid();
void func2();
signals:
void sos(int value);
};


Впрочем все это есть в проекте, пожалуйста помогите, скачацте - попробуйте откомпилировать, проект - MSVC2005.
Заранее очень благодарен!!!
Записан
Mixolap
Гость
« Ответ #1 : Февраль 12, 2007, 23:47 »

Проинициализируй указатели:
   MGrid *grid = new MGrid;
   MPoints *points = new MPoints;
а потом уже  connect все остальное и про delete затем не забуть.
Записан
evilguard
Гость
« Ответ #2 : Февраль 13, 2007, 00:13 »

ааааааааа, вот балбес! Забыл, спасибо!
Дело в том что у меня в программе в этом классе идет долгий расчет, я хотел чтобы он посылал сигнал в полосу прогресса, чтобы было видно ход расчета. А расчет вызывался сразу при вызове конструктора, поэтому и connect приходилось объявлять до вызова конструктора, чтобы ход процесса отобажался. Придется выносить расчет в отдельную функцию ы выполнять ее после вызова connect.
Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 20.