Название: QTableWidget встроить QCheckBox и связать со слотом Отправлено: n4ela от Апрель 21, 2009, 01:31 Есть QTableWidget надо в каждой ячейки столбца создать по checkbox'y и отслеживать изменение их состояний.
На самом деле я попробовал уже много вариантов которые пришли мне в голову, но пока что не получилось. Вот один из них Код: QTableWidgetItem *temp = new ::QTableWidgetItem; Я думал что что нибудь типа Код: connect(temp, SIGNAL(toggled(bool)), MainWindow, SLOT(close())); expected primary-expression before ‘,’ token Еще я ради интереса посмотрел как это можно сделаьт в TreeWidget'e ui->treeWidget->topLevelItem(j)->setCheckState(2, Qt::Checked); Но опять же как связать со слотом? Вобще мне надо осуществить это с QTableWidget, а с TreeWidget это уже просто ради интереса. Буду очень благодарен если кто поможет. Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: registrationfedser87 от Апрель 21, 2009, 06:32 Повесь свою обработку на сигнал:
Код и уже в своём слоте проверяй состояние у item Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: Barmaglodd от Апрель 21, 2009, 07:36 А почему не унаследоваться от QAbstractItemModel и не проверять Qt::CheckStateRole?
Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: n4ela от Апрель 21, 2009, 11:47 Я так и не понял как со слотом связать.
Ну вот есть h файл Код cpp файл. Код
И как теперь связать чекбокс которой в QTableWidget с функцией check? Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: spirit от Апрель 21, 2009, 11:59 через QTableWidget::itemClicked.
Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: n4ela от Апрель 21, 2009, 12:22 Если в cpp файле в конструкторе написать
Код то выдаст expected primary-expression before ‘,’ token Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: spirit от Апрель 21, 2009, 12:26 вот так попробуй
Код я вот че-то не понял, из предыдущих постов видно, что сигнатура check имеет следубщий вид Цитировать check(QTableWidgetItem *temp) почему в коннекте она другая?Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: n4ela от Апрель 21, 2009, 12:37 Моя ошибка, надо check(temp)
Код Вот так все компилируется, но почему то не реагируюте на изменение ячейки, такое ощущение что я где то не там connect вызываю. Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: spirit от Апрель 21, 2009, 12:40 блин, коннект опять неправельный ;D
надо так Код
Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: n4ela от Апрель 21, 2009, 13:03 Понимаю что уже достал. Но connect точно можно вызывать в конструкторе MainWindow
Потому что программа компилируется, но при нажатие по чекбоксу, ничего не происходит. Может в самой функции check что то не дописал? хотя если просто вызвать check то функция выполняется. Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: spirit от Апрель 21, 2009, 13:06 гы, забыл сказать, у тебя в ашнике check объявлен простым методом, а не слотом.
исправь вот так Код PS. всегда смотри, что в консоли, обычно, если что-то не то с коннектами, то в консоли будет соответствующая мессага. Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: pastor от Апрель 21, 2009, 13:09 Имхо тут лучше ловить сигнал QTableWidget::itemChanged. При смене состояния чекбокса этот сигнал должен испуститься
Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: spirit от Апрель 21, 2009, 13:10 Имхо тут лучше ловить сигнал QTableWidget::itemChanged. При смене состояния чекбокса этот сигнал должен испуститься ага, 100%.Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: n4ela от Апрель 21, 2009, 13:18 Спасибо всем большое, все получилось. :)
Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: Danila_Bagrofff от Апрель 21, 2009, 15:22 а я бы создал кучу chekBox'ов
и сделал: setCellWidget И спокойно для каждого виджета сделал connect'ы И никаких проблем. Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: pastor от Апрель 21, 2009, 15:27 а я бы создал кучу chekBox'ов и сделал: setCellWidget И спокойно для каждого виджета сделал connect'ы И никаких проблем. Проблемы есть - память. Жирновато это будет. А если у тебя таблица огромная? Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: spirit от Апрель 21, 2009, 15:30 а я бы создал кучу chekBox'ов плохой подход, очень плохой.и сделал: setCellWidget И спокойно для каждого виджета сделал connect'ы И никаких проблем. Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: Danila_Bagrofff от Апрель 21, 2009, 15:38 если нужно вставлять свои виджеты со своими свойствами и методами. То тогда придется вставлять свои виджеты.
Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: spirit от Апрель 21, 2009, 15:41 тогда пишут свой делегат, который будер быстрее работать чем предложенный тобой метод.
Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: pastor от Апрель 21, 2009, 15:43 если нужно вставлять свои виджеты со своими свойствами и методами. То тогда придется вставлять свои виджеты. или использовать делегаты Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: Danila_Bagrofff от Апрель 21, 2009, 15:50 с делегатами пока не работал.
Для большой таблицы лучше исользовать их? Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: spirit от Апрель 21, 2009, 15:51 ага. они для этого и предназначены. :)
Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: Danila_Bagrofff от Апрель 22, 2009, 07:21 в чем их преимущество, если все равно свой виджет придется вписывать в делегат?
Это будет еще одна надстройка над своим классом... Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: spirit от Апрель 22, 2009, 08:12 в том, что делегат сам устанавливает данные в виджет, а из виджета в модель.
он занимается отрисовкой фокуса, текста, декораций, фона. в общем читай про делегаты и про model view programming. Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: max1983 от Июль 18, 2009, 20:07 Тема гляжу прикрыта!
Будем откупоривать. Я считаю что цели достигли не верно! Конечно если главное было достичь то проблем нет. И так имею схожую проблему у меня Button вместо ChekBox Разницы почти нет. И так у меня Qdevelop и QDesigner и QT 4.5.2 -я тока ючусь И так я кинул на форму контрол QtableWidget Поставил кнопку создаю программно ячейки 6х6 и программно вставляю бутоны(кнопки)
Странно.. Вы спросите зачем QMetaObject::connectSlotsByName(this); сам не знаю - но думаю истина где-то рядом И так почему я предполагаю что надо обычным способом ставить слоты а не перехватывать их от tableWidget Я для эксперимента кинул кнопку на форму и подключил через дизайнер к слоту Mesaga Потом программно вставил ее в таблицу -и о чюдо! ;D Кнопка реагирует на нажатия самостоятельно! ??? Делаем вывод мы чего то не умеем заглянув в файлик ui.H я не нашол чего -то необычного но привожу его строки касающеюся простой функциональности Удалил все что мог..
Короче если тут знающие люди путь ответят в чем разница. Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: break от Июль 18, 2009, 22:28 Цитировать SLOT(this->Mesaga()) вообще-то насколько мне изветсно "SLOT" - это макрос и так как вы написали писать нельзя... фактически у вас не вызывается слот от кнопки не потому что она вставлена в таблицу - а потому что она неправлено связана со слотом! А вообще с кнопками вставленными в QTableWidget проблем нет, и сигнал ловить можно от самой кнопки Код: QObject::connect( pButton, SIGNAL( clicked(bool) ), this, SLOT( btnSet_TTO_CanShunt_clicked(bool) ) ); Цитировать QMetaObject::connectSlotsByName(this); -- это вы себе нафантазировали от нежелания читать документацию...Название: Re: QTableWidget встроить QCheckBox и связать со слотом Отправлено: max1983 от Июль 18, 2009, 23:13 Ну я же выделил жирным - я тока ючусь.
Спасибо большое.
|