crossplatform.ru

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

> Ошибка - Не правильное приведение типов, Не могу понять как исправить
breeve
  опции профиля:
сообщение 12.5.2010, 10:58
Сообщение #1


Участник
**

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

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




Репутация:   1  



Существует QWorkspace. Программа создает окна моего типа(Test). код создания нового окошка:
Раскрывающийся текст
void TestCreator::newTest() [signal]
{
    createNewTest()->show();
    ...
    ...
}

Test* TestCreator::createNewTest()
{
    Test* pTest = new Test;
    workSpace->addWindow(pTest);
    pTest->setAttribute(Qt::WA_DeleteOnClose);
    pTest->setWindowTitle("Unnamed Test");
    pTest->showMaximized();
    pOpenTest = pTest;   //pOpenTest указывает на окно открытое в данные момент
    return pTest;
}
Если создается два окна то на этот случай обрабатывается только то окно которое сейчас активно:
Раскрывающийся текст
connect(workSpace, SIGNAL(windowActivated(QWidget*)), this, SLOT(changeFocus(QWidget*)));

void TestCreator::changeFocus(QWidget* wid)
{
    pOpenTest = wid; // в этом месте ошибка
    pOpenTest->myMethod();
    ...
}
pOpenTest в объявлении указан как Test*. Если указываю как QWidget* то если я потом обращаюсь к методам моего класса, он естественно говорит что таких нет. Как бы его объявить так чтобы бы он был виджетом и тестом? а точнее как привести указатель одного типа в другой? решаема ли проблема?


Может быть нужно как нибудь переопределить сигнал windowActivated() чтобы параметр был моим классом..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
breeve
  опции профиля:
сообщение 12.5.2010, 12:48
Сообщение #2


Участник
**

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

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




Репутация:   1  


Сделал так:
Цитата
Test *w = qobject_cast<Test *>(wid);
if(!w)
return;
pOpenTest = w;
Вывел ошибку.
Ошибки
error: void value not ignored as it ought to be ссылается на qwidget.h
Цитата
А приводить обычными C++ способами.

Стандартные методы это имеется ввиду?:
int a;
double b;
a = (int) b;


Сообщение отредактировал breeve - 12.5.2010, 12:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 12.5.2010, 12:55
Сообщение #3


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Test *w = qobject_cast<Test *>(wid);
if(!w)
    return;
pOpenTest = w;    // <<<<<<<<< Здесь у тебя точно не wid присваивается?


Цитата
Стандартные методы это имеется ввиду?

+ у C++ есть специальные кастеры:
static_cast
dynamic_cast
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 28.4.2024, 18:23