Russian Qt Forum
Июнь 16, 2024, 02:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Не выполняется присоединенный слот  (Прочитано 11045 раз)
Daywer
Гость
« : Апрель 03, 2017, 14:05 »

Уважаемы коллеги помогите горю. Присоединенный слот не выполняется.

field.h:

Код
C++ (Qt)
#ifndef FIELD_H
#define FIELD_H
#include <QWidget>
#include <QTableWidget>
#include <QHeaderView>
#include <QObject>
 
class field : public QObject
{
  Q_OBJECT
 
public:
   field(QWidget * i,int x, int y, int BeginSize);
   QTableWidget  * tablewidget;
 
public slots:
   int waitValue();
 
};
 
#endif // FIELD_H
 
 

field.cpp:

Код
C++ (Qt)
#include "field.h"
 
field::field(QWidget * parent,int x, int y, int BeginSize)
{
 
int i,
    NumCellsOfField = 10,  
    CorrectSize = 2,  
    FieldSize = BeginSize+CorrectSize;
 
tablewidget = new QTableWidget(parent);
 
tablewidget->setGeometry(x,y,FieldSize,FieldSize); //положение и размер поля
tablewidget->setRowCount(NumCellsOfField);
tablewidget->setColumnCount(NumCellsOfField);
//поле 10 x 10 циклом
for (i=0;i!=NumCellsOfField;i++)
                {
                    tablewidget->setRowHeight(i,BeginSize/NumCellsOfField);
                    tablewidget->setColumnWidth(i,BeginSize/NumCellsOfField);
                }
 
connect(tablewidget,SIGNAL(cellClicked(int,int)),this, SLOT(waitValue()));
}
 
 
int field::waitValue(){
 
   tablewidget->setItem(0, 3, new QTableWidgetItem);
   tablewidget->item(0, 3)->setBackground(Qt::red);
   return 0;
}


Компилятор не ругается. Но слот waitValue() не выполняется.
Если   строку в которой соединение происходит заменить на:

connect(tablewidget,SIGNAL(cellClicked(int,int),tablewidget, SLOT(hide()));

то все отлично отрабатывает. Со своим слотом работает отлично, но не со слотом класса field.
при ручном вызове функции waitValue() тоже все отлично.
Как понять причину не вызова? Что я упускаю?
« Последнее редактирование: Апрель 03, 2017, 16:39 от Daywer » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Апрель 03, 2017, 14:17 »

Вы принципиально не пишете тип возвращаемого значения в методах?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Апрель 03, 2017, 14:22 »

Daywer, пожалуйста оформляйте код. Выше смайлов есть комбобокс с языками, выделите код, кликните на комбобокс и выберите из списка нужный язык.

Записан

Daywer
Гость
« Ответ #3 : Апрель 03, 2017, 14:27 »

Вы принципиально не пишете тип возвращаемого значения в методах?
Пока пробую нет. Это не принципиально сейчас. Даже если напишу что Int ничего не изменится
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Апрель 03, 2017, 14:30 »

Daywer, отформатируй свое первое сообщение тегом code

Код
C++ (Qt)
int foo()
{
   return 0;
}
 

И приведи полный код, без обгрыженных типов возвращаемых значений.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Daywer
Гость
« Ответ #5 : Апрель 03, 2017, 14:30 »

Daywer, пожалуйста оформляйте код. Выше смайлов есть комбобокс с языками, выделите код, кликните на комбобокс и выберите из списка нужный язык.


Спасибо. Я исправлюсь
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #6 : Апрель 03, 2017, 14:35 »

connect(tablewidget,SIGNAL(cellClicked(int,int),tablewidget, SLOT(hide()));

скобки не попутал ?
Записан
Daywer
Гость
« Ответ #7 : Апрель 03, 2017, 14:39 »

connect(tablewidget,SIGNAL(cellClicked(int,int),tablewidget, SLOT(hide()));

скобки не попутал ?


нет. Скопировал криво просто. Форматировал текст пока видно накосячил.
« Последнее редактирование: Апрель 03, 2017, 14:41 от Daywer » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #8 : Апрель 03, 2017, 15:32 »

Вы принципиально не пишете тип возвращаемого значения в методах?
Пока пробую нет. Это не принципиально сейчас. Даже если напишу что Int ничего не изменится
Попробуйте написать, может moc спотыкается.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #9 : Апрель 03, 2017, 15:40 »

Ещё можно попробовать другой тип коннекта
Код
C++ (Qt)
connect(tablewidget, &QTableWidget::cellClicked, this, &field::waitValue);
Возможно, компиль выдаст полезную диагностику в случае неуспеха
Записан
Daywer
Гость
« Ответ #10 : Апрель 03, 2017, 15:48 »

Вы принципиально не пишете тип возвращаемого значения в методах?
Пока пробую нет. Это не принципиально сейчас. Даже если напишу что Int ничего не изменится
Попробуйте написать, может moc спотыкается.

Поправил как вы говорили - нет результата.
Записан
Daywer
Гость
« Ответ #11 : Апрель 03, 2017, 15:49 »

Ещё можно попробовать другой тип коннекта
Код
C++ (Qt)
connect(tablewidget, &QTableWidget::cellClicked, this, &field::waitValue);
Возможно, компиль выдаст полезную диагностику в случае неуспеха

Компиль не сругался. Собралось все. Но результат тот же.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #12 : Апрель 03, 2017, 16:06 »

Фигня какая-то выходит Улыбающийся
Приложите к сообщению архив с проектом с данной проблемой
(в дополнительные опции при составлении сообщения есть кнопка вложения)
Записан

Daywer
Гость
« Ответ #13 : Апрель 03, 2017, 16:39 »

Фигня какая-то выходит Улыбающийся
Приложите к сообщению архив с проектом с данной проблемой
(в дополнительные опции при составлении сообщения есть кнопка вложения)

Прикрепил к первому сообщению
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #14 : Апрель 03, 2017, 17:11 »

Код
C++ (Qt)
connect(tablewidget, &QTableWidget::cellClicked, [&]{qDebug() << "lambda";});
 
Так работает.
Какая-то проблема, кажется, связанная с родителями. Как-то странно у вас связь настроена.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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