Я сделал простую программу:QT сигнал и слоты внутри второго класса
Что запустить основную программу -> программа класса -> второй класс
Пусть мы видим код:
главную программа:
QApplication a(argc, argv);
testqtc w; // this one intresting i call this 'first_class'
w.show();
return a.exec();
}
В 'first_class' у меня есть:
testqtc::testqtc(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QTimer *timer = new QTimer(this);
bool p = connect(timer, SIGNAL(timeout()), this, SLOT(updateCaption2()));
std::cout << p;
timer->start(1000);
class1 class1(this); // i call this 'second class' which run under first class
}
void testqtc::updateCaption2(){
std::cout << "first_class" << std::endl;
}
В 'второго класса' у меня есть:
class1::class1(QObject *parent)
: QObject(parent)
{
QTimer *timer = new QTimer(this);
bool p = connect(timer, SIGNAL(timeout()), this, SLOT(updateCaption()));
std::cout << p;
timer->start(1000);
}
void class1::updateCaption(){
std::cout << "second class" << std::endl;
}
Выход:
11first_class
first_class
first_class (-> and only first_class per second)
Это очевидно, что разъем второго класса обыкновению начал. Функция connect return true, но слот не выполняется.
Как использовать функцию соединения в 'second_class'?
или переместить Class1 к объекту членов и инициализируйте его в списке инициализаторов, а не в корпусе конструктора. – user3528438
@ user3528438 Рекомендуемый способ выделения дочерних QObjects (QObjects, у которых есть родительский элемент) - это куча, если вы выделяете в стек QObject, у которого есть родительский элемент, вам нужно быть осторожным, чтобы этот объект был выделен до его родительского контроля, но при необходимости указатель может быть членом. – Zlatomir
Что случилось, если ребенок не был выделен перед родителем? http://stackoverflow.com/questions/28820450/how-to-safely-delete-a-qtqtcpsocket – user3528438