QWidget :: childAt (int, int) возвращает виджет child , а не родительский виджет. В вашем случае он возвращает QProgressBar. Затем вы пытаетесь привести в MyWidget, что это не так. То, что вы ищете, для родителя QProgressBar (или QLabel).
static_cast
не проверяет тип объекта, который вы пытаетесь привести, и всегда будет давать ненулевой указатель, даже если приведение неверно. Здесь вы ищете dynamic_cast
, который вернет NULL, если объект не того типа, который вы ищете. Поскольку вы ищете родителя (или предка) виджета, по которому вы щелкаете, вы можете использовать цикл, чтобы перебрать родословную виджета, по которому щелкнули, чтобы найти экземпляр MyWidget, который вы ищете.
void DragDrop::mousePressEvent(QMouseEvent *event) {
QWidget *widget = childAt(event->pos());
do {
MyWidget *myWidget = dynamic_cast<MyWidget*>(widget);
widget = widget->parentWidget();
} while (myWidget == NULL && widget != NULL)
if (myWidget == NULL)
return;
qDebug() << myWidget->returnLabelText();
// ...
}