crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> сигналы и слоты
demaker
  опции профиля:
сообщение 30.1.2013, 17:14
Сообщение #1


Студент
*

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

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




Репутация:   0  


Выдает ошибку

error: passing 'const TreeWidget' as 'this' argument of 'void TreeWidget::sg_itemChecked(QTreeWidgetItem*)' discards qualifiers

при

 connect(tree,SIGNAL(sg_itemChecked(QTreeWidgetItem*)),this,SLOT(sl_itemChecked(QTreeWidgetItem*)));


якобы вся штука в том что сигнал высылается из

 virtual QMimeData *    mimeData (const QList<QTreeWidgetItem *> items) const;


помошите не могу решить вопрос.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Авварон
  опции профиля:
сообщение 30.1.2013, 18:04
Сообщение #2


Студент
*

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

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




Репутация:   0  


Сделай сигнал константным. А нафига кидать сигнал из конст() функции?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 30.1.2013, 18:59
Сообщение #3


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

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


это не отправка сигнала, а соединение сигнала со слотом вообще то )

и всё как бы намекает, что из константной функции это сделать не получится напрямую

но если сильно хочется, можно попробовать

connect(tree,SIGNAL(sg_itemChecked(QTreeWidgetItem*)),static_cast<TreeWidget*>(this),SLOT(sl_itemChecked(QTreeWidgetItem*)));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
demaker
  опции профиля:
сообщение 31.1.2013, 9:05
Сообщение #4


Студент
*

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

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




Репутация:   0  


да сделал сигнал константным

signals:
    void sg_itemChecked(QTreeWidgetItem*) const;


действительно помогло :)
Спасибо!

у меня возник такой вопрос. :unsure:

Почему при перетаскивании item-ов у меня изначально первый, который изначально я беру - галка не ставится.
После у остальных, которые я хватаю ставится галка, и даже у того который был изначально.

И так со всеми.

Не могу понять, может сигнал изначально не доходит :unsure:

вот код:

QMimeData * TreeWidget::mimeData (const QList<QTreeWidgetItem *> items) const
{
    QMimeData *mimeData = new QMimeData();
    QByteArray encodedData;


    foreach (QTreeWidgetItem* item, items)
    {
        qDebug() <<"index = " << fileName_Item->indexOfChild(item);
        qDebug()<<"data = "<<item->data(0,Qt::EditRole);

        emit sg_itemChecked(item);
        encodedData.append(item->data(0,Qt::EditRole).toByteArray());
    }

    mimeData->setData( "application/x-qt-windows-mime;value=\"ComtradeChannel\"", encodedData);
    return mimeData;
}



void Widget::sl_itemChecked(QTreeWidgetItem *item)
{
    item->setCheckState(0,Qt::Checked);
}


void Widget::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasFormat("application/x-qt-windows-mime;value=\"ComtradeChannel\""))
    {
        QByteArray d(event->mimeData()->data("application/x-qt-windows-mime;value=\"ComtradeChannel\""));
        qDebug()<<"d = "<<d;

        connect(tree,SIGNAL(sg_itemChecked(QTreeWidgetItem*)),this,SLOT(sl_itemChecked(QTreeWidgetItem*)));
    }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
demaker
  опции профиля:
сообщение 31.1.2013, 12:58
Сообщение #5


Студент
*

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

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




Репутация:   0  


может
connect(tree,SIGNAL(sg_itemChecked(QTreeWidgetItem*)),this,SLOT(sl_itemChecked(Q
TreeWidgetItem*)));
в конструктор переместить
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 31.1.2013, 13:05
Сообщение #6


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

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


demaker, здравая мысль )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
demaker
  опции профиля:
сообщение 1.2.2013, 13:19
Сообщение #7


Студент
*

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

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




Репутация:   0  


Определил все и сигнал и слот

connect(items.at(index),SIGNAL(sg_unChecked(TreeWidgetItem*)),this,SLOT(sl_deletePlot(TreeWidgetItem*)));


и ВЫДАЕТ

no matching function for call to 'Widget::connect(TreeWidgetItem* const&, const char*, Widget* const, const char*)'
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 1.2.2013, 14:26
Сообщение #8


Старейший участник
****

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

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




Репутация:   8  


Чтобы использовать сигналы/слоты TreeWidgetItem и Widget должен наследовать от QObject.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
demaker
  опции профиля:
сообщение 1.2.2013, 14:49
Сообщение #9


Студент
*

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

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




Репутация:   0  


Это понятно, т.е у меня TreeWidgetItem не наследуется от QObject?

class TreeWidgetItem: public QObject,public QTreeWidgetItem
{
    Q_OBJECT

public:
    Plot* p;

public:
    explicit TreeWidgetItem(TreeWidgetItem*parent);
    explicit TreeWidgetItem(QTreeWidget*parent);
    explicit TreeWidgetItem(QTreeWidgetItem*parent);
    ~TreeWidgetItem();

signals:
    void sg_unChecked();
};


Вы предлагайте так сделать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 1.2.2013, 15:17
Сообщение #10


Старейший участник
****

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

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




Репутация:   8  


Не работает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 12:09