crossplatform.ru

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


  Ответ в Ошибка - Не правильное приведение типов
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 12.5.2010, 23:30
 
Цитата(breeve @ 12.5.2010, 16:41) *
Не понял почему это Qt3?
Он появился в Qt3, если мне память не изменяет. А в названии нет цифры 3, потому что до Qt 4.3 ничего другого не было.
Цитата(breeve @ 12.5.2010, 17:15) *
Раз Workspace устарел надо использовать MDiarea?
именно, посмотри подробное описание этого класса. Вторая строчка:
Цитата
This class is deprecated. Use QMdiArea instead.
breeve Дата 12.5.2010, 13:15
 
Цитата(BRE @ 12.5.2010, 13:55) *
Test *w = qobject_cast<Test *>(wid);
if(!w)
    return;
pOpenTest = w;    // <<<<<<<<< Здесь у тебя точно не wid присваивается?

Сначала был вид было две ошибки, исправил на w осталась одна.
Тут еще 5-6 предупреждение и одна ошибка:
Раскрывающийся текст
/usr/include/qt4/QtGui/qdialog.h:45: In file included from /usr/include/qt4/QtGui/qdialog.h:45,
/usr/include/qt4/QtGui/qabstractpagesetupdialog.h:45: from /usr/include/qt4/QtGui/qabstractpagesetupdialog.h:45,
/usr/include/qt4/QtGui/QtGui:10: from /usr/include/qt4/QtGui/QtGui:10,
TestCreator/testcreator.h:4: from testcreator.h:4,
TestCreator/testcreator.cpp:1: from testcreator.cpp:1:
/usr/include/qt4/QtCore/qobject.h:441: instantiated from ‘T qobject_cast(QObject*) [with T = Test*]’
TestCreator/testcreator.cpp:31: instantiated from here
/usr/include/qt4/QtGui/qwidget.h:143: error: void value not ignored as it ought to be
Раз Workspace устарел надо использовать MDiarea?

С ошибками разобрался спасибо!!
BRE Дата 12.5.2010, 12:55
 
Test *w = qobject_cast<Test *>(wid);
if(!w)
    return;
pOpenTest = w;    // <<<<<<<<< Здесь у тебя точно не wid присваивается?


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

+ у C++ есть специальные кастеры:
static_cast
dynamic_cast
breeve Дата 12.5.2010, 12:48
  Сделал так:
Цитата
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;
BRE Дата 12.5.2010, 12:46
 
Цитата(breeve @ 12.5.2010, 13:41) *
Не понял почему это Qt3? Если классы 3-ие то пишется же вроде Q3className. А QWorkspace - QWorkspace)

Ну эти классы не рекомендуется использовать в новых приложениях, поэтому я и подумал что Qt3. :)

Тогда решение предложенное Юрой самое то... :)
breeve Дата 12.5.2010, 12:41
  Не понял почему это Qt3? Если классы 3-ие то пишется же вроде Q3className. А QWorkspace - QWorkspace)
BRE Дата 12.5.2010, 11:56
  Юра, qobject_cast в Qt3 еще не было.
Можно проверять класс объекта:
bool QObject::isA ( const char * clname ) const
bool QObject::inherits ( const char * clname ) const

А приводить обычными C++ способами.
Litkevich Yuriy Дата 12.5.2010, 11:36
 
Цитата(breeve @ 12.5.2010, 14:58) *
Существует QWorkspace
этож Qt3

вместо
Цитата(breeve @ 12.5.2010, 14:58) *
pOpenTest = wid; // в этом месте ошибка
напиши:
Test *w = qobject_cast<Test *>(wid);
if(!w)
    return;
pOpenTest = w;
breeve Дата 12.5.2010, 10:58
 
Существует 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() чтобы параметр был моим классом..
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 14:56