Fix crash in TWidgetHelper::show/hideChildren.
This commit is contained in:
parent
d9953c29b8
commit
402b73f5cf
2 changed files with 32 additions and 10 deletions
|
|
@ -12,6 +12,30 @@
|
|||
#include <QtGui/QtEvents>
|
||||
|
||||
namespace Ui {
|
||||
namespace {
|
||||
|
||||
[[nodiscard]] std::vector<QPointer<QWidget>> GetChildWidgets(
|
||||
not_null<QWidget*> widget) {
|
||||
const auto &children = widget->children();
|
||||
auto result = std::vector<QPointer<QWidget>>();
|
||||
result.reserve(children.size());
|
||||
for (const auto child : children) {
|
||||
if (child && child->isWidgetType()) {
|
||||
result.push_back(static_cast<QWidget*>(child));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void ToggleChildrenVisibility(not_null<QWidget*> widget, bool visible) {
|
||||
for (const auto &child : GetChildWidgets(widget)) {
|
||||
if (child) {
|
||||
child->setVisible(visible);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ResizeFitChild(
|
||||
not_null<RpWidget*> parent,
|
||||
|
|
|
|||
|
|
@ -18,6 +18,12 @@
|
|||
#include <QtCore/QPointer>
|
||||
#include <QtGui/QtEvents>
|
||||
|
||||
namespace Ui {
|
||||
|
||||
void ToggleChildrenVisibility(not_null<QWidget*> widget, bool visible);
|
||||
|
||||
} // namespace Ui
|
||||
|
||||
class TWidget;
|
||||
|
||||
template <typename Base>
|
||||
|
|
@ -30,18 +36,10 @@ public:
|
|||
}
|
||||
|
||||
void hideChildren() {
|
||||
for (auto child : Base::children()) {
|
||||
if (child->isWidgetType()) {
|
||||
static_cast<QWidget*>(child)->hide();
|
||||
}
|
||||
}
|
||||
Ui::ToggleChildrenVisibility(this, false);
|
||||
}
|
||||
void showChildren() {
|
||||
for (auto child : Base::children()) {
|
||||
if (child->isWidgetType()) {
|
||||
static_cast<QWidget*>(child)->show();
|
||||
}
|
||||
}
|
||||
Ui::ToggleChildrenVisibility(this, true);
|
||||
}
|
||||
|
||||
void moveToLeft(int x, int y, int outerw = 0) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue