crossplatform.ru

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


  Ответ в Отсутствует свойство типа void* в QTreeWidgetItem
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
Darvin Дата 12.12.2007, 13:54
  Всем спасибо за примеры и инфу. Буду дальше копать.
Swappp Дата 10.12.2007, 16:52
  void* можно без проблем хранить в QVariant. Он уже объявлен в Qt как поддерживаемый тип. Работать с ним так же как и с другими типами например из QtGui.
ViGOur Дата 10.12.2007, 14:56
  Можно, если я правильно тебя понял, вот пример:
#include <QtCore/QCoreApplication>

#include <QString>
#include <QStringList>
#include <QVariant>

struct MyStruct
{
    QStringList m_listData;
};

Q_DECLARE_METATYPE(MyStruct*)

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    MyStruct *pms = new MyStruct;
    for( int n = 0; n < 10; n++)
    {
        QString sz;
        sz.sprintf( "test string %d", n);
        pms->m_listData.append( sz);
    }

    QVariant v;
    v.setValue( pms);

    MyStruct *pnewms;
    if( v.canConvert<MyStruct*>())
    {
        pnewms = v.value<MyStruct*>();

        qDebug( "List strings");
        QStringList::iterator pIter;
        for( pIter = pnewms->m_listData.begin(); pIter != pnewms->m_listData.end(); pIter++)
        {
            qDebug( "\t%s", qPrintable( *pIter));
        }
    }

    return a.exec();
}
Darvin Дата 10.12.2007, 14:22
 
Цитата(ViGOur @ 5.12.2007, 16:56) *
Пример того, как обращаться в QVariant спользовательским типом:
MyStruct ms;
QVariant v;
MyStruct newms;


1)Можно ли обойтись без статического объявления?
2)В приведенном примере будет происходить копирование данных, а мне нужен только указатель на них.
ViGOur Дата 5.12.2007, 16:56
  Пример того, как обращаться в QVariant спользовательским типом:
#include <QtCore/QCoreApplication>

#include <QString>
#include <QStringList>
#include <QVariant>

struct MyStruct
{
    QStringList m_listData;
};

Q_DECLARE_METATYPE(MyStruct)

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    MyStruct ms;
    for( int n = 0; n < 10; n++)
    {
        QString sz;
        sz.sprintf( "test string %d", n);
        ms.m_listData.append( sz);
    }

    QVariant v;
    v.setValue( ms);

    MyStruct newms;
    if( v.canConvert<MyStruct>())
    {
        newms = v.value<MyStruct>();

        qDebug( "List strings");
        QStringList::iterator pIter;
        for( pIter = newms.m_listData.begin(); pIter != newms.m_listData.end(); pIter++)
        {
            qDebug( "\t%s", qPrintable( *pIter));
        }
    }

    return a.exec();
}
Darvin Дата 5.12.2007, 16:03
  Это если типы совместимы с Variant, чаще всего, строчные или численные данные.
Мне же нужно связать с узлом дерева экземпляр класса QGraphicsPixmapItem из сцены.
В графической сцене элементы хранятся в списке, а мне нужно отобразить список на древесную структуру и на виджет.
Для этого и нужен void*
При выборе элемента дерева, вызвать метод контейнера, содержащего элемент(в данном случае MyQGraphicsScene),
передать в него указатель, там выполнить приведение типа и выделить пунктиром на сцене, соответсвующее изображение.
ViGOur Дата 5.12.2007, 11:49
  Если я не ошибаюсь, то для этих целей используется:
void QTreeWidgetItem::setData ( int column, int role, const QVariant & value )   [virtual]

и
QVariant QTreeWidgetItem::data ( int column, int role ) const   [virtual]
Darvin Дата 5.12.2007, 11:44
  Не могу найти у QTreeWidgetItem свойство типа void* для связывания с произвольным экземпляром данных.
В других библиотеках, как правило, есть подобное свойство у класса Узла дерева.
Неужели единственный выход это наследование и созднание собственного класса?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 16:28