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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QTableWidget встроить QCheckBox и связать со слотом  (Прочитано 20247 раз)
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #15 : Апрель 21, 2009, 15:27 »

а я бы создал кучу chekBox'ов
и сделал: setCellWidget
И спокойно для каждого виджета сделал connect'ы
И никаких проблем.

Проблемы есть - память. Жирновато это будет. А если у тебя таблица огромная?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
spirit
Гость
« Ответ #16 : Апрель 21, 2009, 15:30 »

а я бы создал кучу chekBox'ов
и сделал: setCellWidget
И спокойно для каждого виджета сделал connect'ы
И никаких проблем.
плохой подход, очень плохой.
Записан
Danila_Bagrofff
Гость
« Ответ #17 : Апрель 21, 2009, 15:38 »

если  нужно вставлять свои виджеты со своими свойствами и методами. То тогда придется вставлять свои виджеты.
Записан
spirit
Гость
« Ответ #18 : Апрель 21, 2009, 15:41 »

тогда пишут свой делегат, который будер быстрее работать чем предложенный тобой метод.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #19 : Апрель 21, 2009, 15:43 »

если  нужно вставлять свои виджеты со своими свойствами и методами. То тогда придется вставлять свои виджеты.

или использовать делегаты
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Danila_Bagrofff
Гость
« Ответ #20 : Апрель 21, 2009, 15:50 »

с делегатами пока не работал.
Для большой таблицы лучше исользовать их?
Записан
spirit
Гость
« Ответ #21 : Апрель 21, 2009, 15:51 »

ага. они для этого и предназначены.  Улыбающийся
Записан
Danila_Bagrofff
Гость
« Ответ #22 : Апрель 22, 2009, 07:21 »

в чем их преимущество, если все равно свой виджет придется вписывать в делегат?
Это будет еще одна надстройка над своим классом...
Записан
spirit
Гость
« Ответ #23 : Апрель 22, 2009, 08:12 »

в том, что делегат сам устанавливает данные в виджет, а из виджета в модель.
он занимается отрисовкой фокуса, текста, декораций, фона.
в общем читай про делегаты и про model view programming.
Записан
max1983
Гость
« Ответ #24 : Июль 18, 2009, 20:07 »

Тема гляжу прикрыта!
Будем откупоривать.
Я считаю что цели достигли не верно!
Конечно если главное было достичь то проблем нет.

И так имею схожую проблему у меня Button вместо ChekBox

Разницы почти нет.

И так у меня Qdevelop и QDesigner и QT 4.5.2 -я тока ючусь

И так я кинул на форму контрол QtableWidget

Поставил кнопку создаю программно ячейки 6х6 и программно вставляю бутоны(кнопки)

Цитировать
void MainWindowImpl::InsertControlButtonToTable()
{
   QPushButton * ButonaME  = 0;

   
      for (int j = 1; j < 6; j++)
      {
         ButonaME = new QPushButton(ConvertText("Эт Кнопка № ") + QString("%1").arg(j),tableWidget);
         tableWidget->setCellWidget(j, 5, ButonaME);
         ButonaME->setObjectName(QString("ButonaME_%l").arg(j));
         QObject::connect(ButonaME, SIGNAL(clicked()), this, SLOT(this->Mesaga()));
      }
   
   
    QMetaObject::connectSlotsByName(this);
   
   pushButton_14->setEnabled(false);
      
}

И как вы догадались слоты не работают!
Странно..
Вы спросите зачем
QMetaObject::connectSlotsByName(this);
сам не знаю - но думаю истина где-то рядом

И так почему я предполагаю что надо обычным способом ставить слоты а не перехватывать их от tableWidget
Я для эксперимента кинул кнопку на форму и подключил через дизайнер к слоту Mesaga
Потом программно вставил ее в таблицу -и о чюдо!  Смеющийся
Кнопка реагирует на нажатия самостоятельно!  Непонимающий
Делаем вывод мы чего то не умеем
заглянув в файлик ui.H я не нашол чего -то необычного но привожу его строки касающеюся простой функциональности

Удалил все что мог..
Цитировать
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H


#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralwidget;
    QPushButton *pushButton;
   
    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
        MainWindow->resize(786, 742);
        centralwidget = new QWidget(MainWindow);
        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
        pushButton = new QPushButton(centralwidget);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(10, 10, 161, 23));
       

        retranslateUi(MainWindow);
        QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(Mesaga()));
        QObject::connect(tableWidget, SIGNAL(itemEntered(QTableWidgetItem*)), MainWindow, SLOT(ClikedToControls(QTableWidgetItem*)));

        toolBox->setCurrentIndex(0);


        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MyWindow", 0, QApplication::UnicodeUTF8));
        pushButton->setText(QApplication::translate("MainWindow", "\320\234\320\265\321\201\320\260\320\263\320\260 \320\261\320\276\320\272\321\201 \320\270\320\267\320\262\321\200\320\260\321\211\320\265\320\275\320\270\320\265", 0, QApplication::UnicodeUTF8));
               Q_UNUSED(MainWindow);
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

И вот значит так созданная кнопка работает а моим методом нет..
Короче если тут знающие люди путь ответят в чем разница.


Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #25 : Июль 18, 2009, 22:28 »

Цитировать
SLOT(this->Mesaga())

вообще-то насколько мне изветсно "SLOT" - это макрос и так как вы написали писать нельзя...
фактически у вас не вызывается слот от кнопки не потому что она вставлена в таблицу - а потому что она неправлено связана со слотом!

А вообще с кнопками вставленными в QTableWidget проблем нет, и сигнал ловить можно от самой кнопки

Код:
QObject::connect( pButton, SIGNAL( clicked(bool) ), this, SLOT( btnSet_TTO_CanShunt_clicked(bool) ) );

m_ui.twTTO->setCellWidget( row, TTO_CAN_SHUNT_BTN_COLUMN, pButton );

Цитировать
QMetaObject::connectSlotsByName(this);
-- это вы себе нафантазировали от нежелания читать документацию...
« Последнее редактирование: Июль 18, 2009, 22:32 от break » Записан
max1983
Гость
« Ответ #26 : Июль 18, 2009, 23:13 »

Ну я же выделил жирным  - я тока ючусь.
Спасибо большое.

Цитировать
-- это вы себе нафантазировали от нежелания читать документацию...
Тут ты прав.  Смеющийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.133 секунд. Запросов: 22.