crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QTreeWidget, Сигналы
flankerr
  опции профиля:
сообщение 19.2.2008, 15:45
Сообщение #1


Активный участник
***

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

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




Репутация:   0  


Qt 4.1.2
Есть дерево в узлах установлено чекбокс, так вот не получается выловить сигнал измения состояния этого чек бокса... (когда пользователь щёлкает по чекбоксу)

connect(this,SIGNAL(itemClicked( QTreeWidgetItem * item, int column )),this,SLOT(OnChangedItem( QTreeWidgetItem * item, int column ) ));
сonnect(this,SIGNAL(itemChanged( QTreeWidgetItem * item, int column ) ),this,SLOT(OnChangedItem( QTreeWidgetItem * item, int column ) ));

разумеется слот OnChangedItem( QTreeWidgetItem * item, int column ) создан.
но не отрабатывает а где грабли не вижу...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 19.2.2008, 16:25
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


А как ты выставляешь чекбокс? Я просто не совсе понял, что за чекбокс... :blush:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.2.2008, 16:44
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


чето я про чек бокс тоже не въехал, если юзер именно чек бокс кликает дак и сигнал чекбокса ловить надо

void stateChanged ( int state )

или
void clicked ( bool checked = false )


если, конечно, я картину правильно представил.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 19.2.2008, 17:05
Сообщение #4


Активный участник
***

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

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




Репутация:   0  


Есть класс унаследованный от QTreeWidget

внутри класса

создал узел
QTreeWidgetItem* pItem = new QTreeWidgetItem(this);

вставил чекбокс
pItem->setCheckState(0,Qt::Checked);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 19.2.2008, 17:40
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


У меня все отрабатывает, я сделал вот так:
class CTest: public QObject
{
    Q_OBJECT

public:
    CTest(QWidget *parent = 0, Qt::WFlags flags = 0){}
    ~CTest(){}

public slots:
    void OnCheckState( QTreeWidgetItem *item, int column);
};

void CTest::OnCheckState( QTreeWidgetItem *item, int column)
{
    QMessageBox::information( 0, "info", QObject::tr( "%1- column %2").arg( item->isExpanded()).arg( column));
}

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

    QTreeWidget *pTreeWidget = new QTreeWidget( 0);
    pTreeWidget->setColumnCount(2);
    QStringList headers;
    headers << QObject::tr("Subject") << QObject::tr("Default");
    pTreeWidget->setHeaderLabels( headers);

    QTreeWidgetItem *pRoot = new QTreeWidgetItem( pTreeWidget);
    pRoot->setText( 0, QObject::tr("Root"));
    
    for( int n = 0; n < 100; n++)
    {
        QTreeWidgetItem *pChild = new QTreeWidgetItem( pRoot);
        pChild->setFlags( pChild->flags() | Qt::ItemIsEditable);
        
        QString sz0 = QObject::tr( "Item %1").arg( n);
        QString sz1 = QObject::tr( "Sub item %1").arg( n);
        pChild->setText(0, sz0);
        pChild->setText(1, sz1);

        pChild->setCheckState(0,Qt::Checked);
    }

    pTreeWidget->expandItem( pRoot);
    //pTreeWidget->collapseItem( pRoot);

    CTest test;
    QObject::connect( pTreeWidget, SIGNAL(  itemChanged( QTreeWidgetItem *, int)), &test, SLOT( OnCheckState( QTreeWidgetItem *, int)));
    pTreeWidget->show();

    return a.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.2.2008, 18:31
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Я по пробывал твой пример скомпилить, линкер ругается:
build/main.o(.text+0x1c):main.cpp: undefined reference to `vtable for CTest'
build/main.o(.text+0x4c):main.cpp: undefined reference to `vtable for CTest'
build/main.o(.text+0xb33):main.cpp: undefined reference to `vtable for CTest'
build/main.o(.text+0xc4c):main.cpp: undefined reference to `vtable for CTest'
collect2: ld returned 1 exit status


хотя в файл сунул
#include <QtGui>

может че забыл, не пойму
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 19.2.2008, 18:36
Сообщение #7


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Класс CTest нужно перенести в .h файл. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.2.2008, 18:37
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


хм, а вчем принципиальная разница?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 19.2.2008, 18:40
Сообщение #9


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


в moc'е. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.2.2008, 18:42
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


ХМ, НЮАНЕЦ однако, это видимо во всех случаях где макрос Q_OBJECT,
т.к. без него я делал все в одном файле.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 19:52