Есть проект, в нем обрабатывает внешняя библиотека, у которой есть функции обратного вызова. Когда происходит событие функция обратного вызова возвращает данные, эти данные передаются в другую функцию, а от туда через emit отправляются в слот для добавления этих данных в qtablewidget. Данные передаются по цепи, но в таблицу не заносятся. в чем может быть проблема?
P.S.: если что нибудь добавить в таблицу по нажатию кнопки, то все ок - передача сигнала
void sig_slot::some_func(int x, int y, char *z) //статическая функция для обратного вызова
{
qDebug()<<"some_func"<<x<<y<<z; //показывает что получены данные
sig_slot *pmw=new sig_slot;
pmw->get_table(z,y,z);//передаем
}
void sig_slot::get_table(int x, int y, char *z)
{
emit send_test(x, y, z); //слот
}
Заполнение таблицы:
void sig_slot::send_test( int x, int y, char *z)
{
QDateTime dt = QDateTime::currentDateTime();
int row = tableWidget->rowCount();
tableWidget->insertRow(row);
tableWidget->setColumnCount(4);
QTableWidgetItem* item_dt = new QTableWidgetItem { dt.toString("dd.MM.yy hh.mm.ss") };
item_dt->setBackground(Qt::red);
tableWidget->setItem(row, 0, item_dt);
QTableWidgetItem* item_ch = new QTableWidgetItem { QString::number(x)};
item_ch->setBackground(Qt::green);
tableWidget->setItem(row, 1, item_ch);
QTableWidgetItem* item_wt = new QTableWidgetItem { QString::number(y)};
item_wt->setBackground(Qt::red);
tableWidget->setItem(row, 2, item_wt);
QTableWidgetItem*item_pn = new QTableWidgetItem {QString::fromLocal8Bit(z)};
item_pn->setBackground(Qt::green);
tableWidget->setItem(row, 3, item_pn);
qDebug()<<"func"<<x<<y<<z; //показывает что данные были переданы
}
А так все работает:
connect(button, &QPushButton::clicked, this, &sig_slot::t_table);
void sig_slot::t_table()
{
QDateTime dt = QDateTime::currentDateTime();
int row = tableWidget->rowCount();
tableWidget->insertRow(row);
tableWidget->setColumnCount(4);
QTableWidgetItem* item_dt = new QTableWidgetItem { dt.toString("dd.MM.yy hh.mm.ss") };
item_dt->setBackground(Qt::red);
tableWidget->setItem(row, 0, item_dt);s.
QTableWidgetItem* item_ch = new QTableWidgetItem { "test2"};
item_ch->setBackground(Qt::green);
tableWidget->setItem(row, 1, item_ch);
QTableWidgetItem* item_wt = new QTableWidgetItem { "test2"};
item_wt->setBackground(Qt::red);
tableWidget->setItem(row, 2, item_wt);
QTableWidgetItem*item_pn = new QTableWidgetItem {"test2"};
item_pn->setBackground(Qt::green);
tableWidget->setItem(row, 3, item_pn);
}
Send_test можно вызвать напрямую из get_table. Если же вы хотите использовать механизм сигналов, то эмитировать надо сигнал, а слот должен быть к нему подключён с помощью connect. Правда, непонятно зачем это надо внутри одного объекта
sig_slot *pmw=new sig_slot;
pmw->get_table(z,y,z);//передаем
В этом месте вы создали новый объект sig_slot и для него вызываете функцию get_table, только к этому объекту не подключен никакой обработчик через connect.
Вам в этой функции не нужно создавать новый объект, а нужно получить доступ к уже созданному и для него вызывать get_table, как это сделать: через глобальную, статическую переменную, это уже другой вопрос.
void sig_slot::some_func(int x, int y, char *z) //статическая функция для
обратного вызова
{
qDebug()<<"some_func"<<x<<y<<z; //показывает что получены данные
sig_slot *pmw=new sig_slot;
pmw->get_table(z,y,z);//передаем
}
в общем чтобы все заработало нужно делать глобальную переменную sig_slot* globalObject; в main.cpp и инициализируешь её там же. Далее, в файле реализации в самом начале ставить строчку extern sig_slot* globalObject;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
На строке hr = pEnum->Next(WBEM_INFINITE, 1, &pObject, &returned); выкидывает ошибку IDispatch error #3587, почему это происходит и как это можно исправить?
Имеется программа которая просто скачивает файл и записывает на рабочий стол, все хорошо программа скачивает, но вот в чем проблема антивирусник...
Ситуация такая есть у меня библиотека-кликер и я хочу написать несколько функций которые бы работали не через winapi эмулируя клавиатуру, мышь...
Есть массив изображенийНужно выделить изображения содержащие текст