Russian Qt Forum

Qt => Вопросы новичков => Тема начата: r04 от Февраль 19, 2013, 08:55



Название: полоса вокруг QGraphicsProxyWidget
Отправлено: r04 от Февраль 19, 2013, 08:55
Здравствуйте. На графическую сцену кидаю виджеты.
Код:
class GroundScene: public QGraphicsScene {
//...
};
//...
class Block: public QWidget {
//...
};
//...
/*virtual*/ QGraphicsProxyWidget* GroundScene::addWidget(Block *widget) {

  widget->setAttribute(Qt::WA_NoSystemBackground);

  auto t = QGraphicsScene::addWidget(widget);

  t->setPalette(QColor(0, 0, 0, 0));  /// помеченная строка
  return t;
}

Если помеченная строка раскомментирована - вокруг виджета белая рамка. Если закомментирована - черная. Скриншоты прикрепил.

При измении размеров окна (сцены) нижняя горизонтальная полоса то пропадает , то появляется, я виню округление (правая полоса тоже появляется, на скриншотах не показано). Верхняя и левая полосы никуда не пропадают.

Подскажите как убрать полосы?


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: carrygun от Февраль 19, 2013, 13:16
Может попробовать убрать фрейм у виджета?


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: r04 от Февраль 19, 2013, 13:56
было бы хорошо, но как убрать фрэйм у проксивиджета?
setStyleSheet там не определен как и setFrameStyle


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: Bepec от Февраль 19, 2013, 14:00
Я думаю надо его убрать в виджете :) Прокси на то и прокси, что берёт данные из виджета, а не от себя придумывает.

Хотя могу и ошибаться :)


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: r04 от Февраль 19, 2013, 14:13
widget->setStyleSheet("QLabel { border:0px solid red; }");
не помогло, но выставив рамку в не 0px я заметил что моя новая рамка оказывается внутри этой негодной старой.

Всем спасибо, проблему решил каким то срашным костылем:

чтобы нормально выводились картинки с прозрачным фоном я писал что-то типа:

Код:
 painter.setBrush (QBrush (QColor (0, 0, 0, 0)));
 painter.drawRect (0, 0, width(), height());

ЗЫ. Если знаете как правильнее - подскажите пожалсто.

заменил на:  painter.drawRect (-1, -1, width() + 2, height() + 2);

и рамка пропала.

Но товарищи, этож все равно ужасно..


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: _OLEGator_ от Февраль 19, 2013, 14:16
Вообще похоже, что неправильно определяется прямоугольная область объекта. Если ты ничего такого не переопределяешь, связанного с отрисовкой и определением области отрисовки, то тогда да, очень странный косяк.
Также это может зависеть от ViewportUpdateMode у вьювера, какое кстати там значение выставлено?
Лучше бы конечно минимальный проект с ошибкой прикрепил...


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: r04 от Февраль 19, 2013, 14:25
ничего не переопределял, значения тоже по умолчанию:
QGraphicsView::MinimalViewportUpdate

минимальный проект, мб однажды прикреплю, если еще с ошибками на эту тему столкнусь


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: Bepec от Февраль 19, 2013, 14:30
Цитировать
painter.setBrush (QBrush (QColor (0, 0, 0, 0)));
 painter.drawRect (0, 0, width(), height());

ППЦ. ты сам же её рисуешь? Что тебя не устраивает?
А при рисовании за границей (-1 и прочая), рамка наверняка тупо обрезается кропом.

Что тебя не устраивает?


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: r04 от Февраль 19, 2013, 14:32
неустраивает что рамку убрать "по-человечески" не получилось. А так, сойдет )


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: Bepec от Февраль 19, 2013, 14:34
Так не рисуй rect.

ТЫ её рисовал. Убери нафиг строку drawRect и будет тебе счастье!


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: r04 от Февраль 19, 2013, 14:38
огромное спасибо )


Название: Re: полоса вокруг QGraphicsProxyWidget
Отправлено: Bepec от Февраль 19, 2013, 14:40
Фух. Пожалуйста.