Существует один вариант, который включает использование QGraphicsPixmapItem
и запрос ограничительной рамки непрозрачной области (QGraphicsPixmapItem::opaqueArea().boundingRect()
). Не уверен, что это лучший способ, но он работает :) Возможно, стоит покопаться в исходном коде Qt, чтобы увидеть, какой код лежит в основе.
Следующий код распечатает ширину и высоту изображения, а затем ширину и высоту непрозрачных частей изображения:
QPixmap p("image.png");
QGraphicsPixmapItem *item = new QGraphicsPixmapItem(p);
std::cout << item->boundingRect().width() << "," << item->boundingRect().height() << std::endl;
std::cout << item->opaqueArea().boundingRect().width() << "," << item->opaqueArea().boundingRect().height() << std::endl;