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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка в QT? Ошибка сеттеров для QWidgetStar QObjectStar  (Прочитано 2637 раз)
Владислав
Гость
« : Май 23, 2013, 14:20 »

Здравствуйте!

В сеттеры QMetaType::QWidgetStar и QMetaType::QObjectStar передаются неверные указатели!

Проверял так:
class CGui : public QObject
{
   Q_OBJECT
   Q_PROPERTY(QWidget* from1 READ from1 WRITE setfrom1)
private:
   QWidget * from1wi;
   QWidget*  from1()
   {
      return from1wi;
   };
   void setfrom1(QWidget* _v)
   {
      
      from1wi = _v;//
   };

...
}

И, если сделать
   from1wi = new QWidget;
   setProperty( "from1", QVariant( QMetaType::QObjectStar, from1wi ) );
, то в аргумент метода setfrom1 придёт неверный указатель!!!

Проверял на qt 4.6.4

« Последнее редактирование: Май 23, 2013, 14:22 от Владислав » Записан
Bepec
Гость
« Ответ #1 : Май 23, 2013, 14:25 »

Вы в QWidget* пытаетесь запихать QObject* тип. Или я неправ?
Записан
Владислав
Гость
« Ответ #2 : Май 23, 2013, 23:46 »

это здесь опечатка, я для QWidget* проверял как

class CGui : public QObject
{
   Q_OBJECT
   Q_PROPERTY(QWidget* from1 READ from1 WRITE setfrom1)
public:
   QWidget * from1wi;
private:   
   QWidget*  from1()
   {
      return from1wi;
   };
   void setfrom1(QWidget* _v)
   {
     
      from1wi = _v;//
   };

};

Посылаем
CGui cgi;
  cgi.from1wi = new QWidget;
   cgi.setProperty( "from1", QVariant( QMetaType::QWidgetStar, cgi.from1wi ) );

Ещё раз проверил, не поленился - в setfrom1 неверный указатель идёт!!!

« Последнее редактирование: Май 23, 2013, 23:58 от Владислав » Записан
Bepec
Гость
« Ответ #3 : Май 24, 2013, 07:11 »

В душе не чаю что там происходит Улыбающийся Просто записывайте и считывайте long.
Записан
Serr500
Гость
« Ответ #4 : Май 24, 2013, 08:53 »

Цитировать
QVariant::QVariant ( int typeOrUserType, const void * copy )

Constructs variant of type typeOrUserType, and initializes with copy if copy is not 0.

Note that you have to pass the address of the variable you want stored.

Usually, you never have to use this constructor, use QVariant::fromValue() instead to construct variants from the pointer types represented by QMetaType::VoidStar, QMetaType::QObjectStar and QMetaType::QWidgetStar.

See also QVariant::fromValue() and Type.
Записан
Владислав
Гость
« Ответ #5 : Май 24, 2013, 09:55 »

Благодарю вас за ответы, а Serr500 отдельное спасибо!

CGui cgi;
cgi.from1wi = new QWidget;
//cgi.setProperty( "from1", QVariant( QMetaType::QWidgetStar, cgi.from1wi ) );
cgi.setProperty( "from1", QVariant::fromValue( cgi.from1wi ) );
« Последнее редактирование: Май 24, 2013, 10:02 от Владислав » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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