crossplatform.ru

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

> Сигнал и слот со сложным типом параметра, QStack<QPair <QPoint, QPoint> >
greh
  опции профиля:
сообщение 19.10.2011, 7:29
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 23.11.2009
Пользователь №: 1252

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




Репутация:   0  


Про компиляции на вот такой коннект не ругается:
connect(pathFinder0, SIGNAL(pathFind(QStack<QPair<QPoint,QPoint> >)), this, SLOT(shortPathFound(QStack<QPair<QPoint,QPoint> >)));


Однако при приёме сигнала выдаёт в консоль следущее:
QObject::connect: Cannot queue arguments of type 'QStack<QPair<QPoint,QPoint> >'
(Make sure 'QStack<QPair<QPoint,QPoint> >' is registered using qRegisterMetaType().)


Что он хочет? Будет ли проще и лучше после получения сигнала забирать эти данные из объекта функцией?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Snake174
  опции профиля:
сообщение 19.10.2011, 10:45
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 89
Регистрация: 18.4.2011
Из: Миасс
Пользователь №: 2613

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




Репутация:   0  


Цитата(greh @ 19.10.2011, 9:08) *
В заголовочных файлах менять описание сиглналов/слотов?

Ничего менять не надо. qRegisterMetaType< QStack<QPair<QPoint,QPoint> > >("Stack"); поставь в конструктор или ещё куда, главное до посыла сигнала.

Цитата(greh @ 19.10.2011, 9:08) *
(почему оно не работает без этой магии)?

А почему "оно" вообще не делает всё за тебя?

mainwindow.cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
  qRegisterMetaType< QStack<QPair<QPoint,QPoint> > >("Stack");

  QPushButton *pathFinder0 = new QPushButton("sdf", this);
  connect(pathFinder0, SIGNAL(pathFind(QStack<QPair<QPoint,QPoint> >)), this, SLOT(shortPathFound(QStack<QPair<QPoint,QPoint> >)));
}

MainWindow::~MainWindow()
{
}


mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include <QMetaType>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

#endif // MAINWINDOW_H
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 17.2.2025, 2:11