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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка в QT? Ошибка сеттеров для QWidgetStar QObjectStar  (Прочитано 2773 раз)
Владислав
Гость
« : Мая 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.028 секунд. Запросов: 20.