Russian Qt Forum
Сентябрь 29, 2024, 00:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: полоса вокруг QGraphicsProxyWidget  (Прочитано 4307 раз)
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;
}

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

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

Подскажите как убрать полосы?
« Последнее редактирование: Февраль 19, 2013, 08:59 от r04 » Записан
carrygun
Гость
« Ответ #1 : Февраль 19, 2013, 13:16 »

Может попробовать убрать фрейм у виджета?
Записан
r04
Гость
« Ответ #2 : Февраль 19, 2013, 13:56 »

было бы хорошо, но как убрать фрэйм у проксивиджета?
setStyleSheet там не определен как и setFrameStyle
Записан
Bepec
Гость
« Ответ #3 : Февраль 19, 2013, 14:00 »

Я думаю надо его убрать в виджете Улыбающийся Прокси на то и прокси, что берёт данные из виджета, а не от себя придумывает.

Хотя могу и ошибаться Улыбающийся
Записан
r04
Гость
« Ответ #4 : Февраль 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);

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

Но товарищи, этож все равно ужасно..
Записан
_OLEGator_
Гость
« Ответ #5 : Февраль 19, 2013, 14:16 »

Вообще похоже, что неправильно определяется прямоугольная область объекта. Если ты ничего такого не переопределяешь, связанного с отрисовкой и определением области отрисовки, то тогда да, очень странный косяк.
Также это может зависеть от ViewportUpdateMode у вьювера, какое кстати там значение выставлено?
Лучше бы конечно минимальный проект с ошибкой прикрепил...
« Последнее редактирование: Февраль 19, 2013, 14:17 от _OLEGator_ » Записан
r04
Гость
« Ответ #6 : Февраль 19, 2013, 14:25 »

ничего не переопределял, значения тоже по умолчанию:
QGraphicsView::MinimalViewportUpdate

минимальный проект, мб однажды прикреплю, если еще с ошибками на эту тему столкнусь
« Последнее редактирование: Февраль 19, 2013, 14:28 от r04 » Записан
Bepec
Гость
« Ответ #7 : Февраль 19, 2013, 14:30 »

Цитировать
painter.setBrush (QBrush (QColor (0, 0, 0, 0)));
 painter.drawRect (0, 0, width(), height());

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

Что тебя не устраивает?
Записан
r04
Гость
« Ответ #8 : Февраль 19, 2013, 14:32 »

неустраивает что рамку убрать "по-человечески" не получилось. А так, сойдет )
Записан
Bepec
Гость
« Ответ #9 : Февраль 19, 2013, 14:34 »

Так не рисуй rect.

ТЫ её рисовал. Убери нафиг строку drawRect и будет тебе счастье!
Записан
r04
Гость
« Ответ #10 : Февраль 19, 2013, 14:38 »

огромное спасибо )
Записан
Bepec
Гость
« Ответ #11 : Февраль 19, 2013, 14:40 »

Фух. Пожалуйста.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 21.