我使类继承自QListWidget并重写resizeEvent:
void ListaDrzew::resizeEvent(QResizeEvent *event)
{
QListWidget::resizeEvent(event);
int width = event->size().width() / columnNumber - 10;
setIconSize(QSize(width, width));
setGridSize(iconSize());
}
但是有时候,当我通过拆分器调整小部件的大小时,应用程序崩溃,并显示以下消息:
QPainter::begin: Paint device returned engine == 0, type: 2
用户调整窗口小部件大小时,更改iconSize和gridSize的正确方法是什么?我尝试使用BlockingQueuedConnection并向自己发出信号,但这会导致死锁。
最佳答案
您不应执行任何可以更改resizeEvent
中的小部件大小的操作,因为它可能导致无限递归。看来这是您的情况。也许可以使用此快速修复:
void ListaDrzew::resizeEvent(QResizeEvent *event)
{
QListWidget::resizeEvent(event);
if (!setting_new_size) {
setting_new_size = true;
int width = event->size().width() / columnNumber - 10;
setIconSize(QSize(width, width));
setGridSize(iconSize());
setting_new_size = false;
}
}
(
bool setting_new_size
是私有(private)类成员变量)。但是,这是一个逻辑错误。您只是不能根据窗口小部件的大小来更改图标的大小,因为它们相互依赖。您应该使用其他一些参数进行计算(例如,如果顶层窗口的大小不取决于列表图标的大小)。