LINUX.ORG.RU

c++ qt проблема с цветами

 ,


0

1

Доброго времени суток, уважаемые форумчане! С-но, есть код:

void Shape::paint(QPainter *painter,
                    const QStyleOptionGraphicsItem *option,
                    QWidget *widget)
{
//проверка на выделение если выделен - красный контур
if(isSelected())
{
   painter->setPen(Qt::red);
  
}
else
{
    painter->setPen(Qt::black);
}
/////////////////////////////////////////////////////

QPen pen;

painter->setPen(pen);
painter->drawPath(m_shape);//сформированный контур объекта

painter->drawText(m_shape.boundingRect(), name);//имя объекта
}

Когда он писался, то проверялся на Windows и все отлично работало. При сборке под Liunx(Ubuntu 13.04) при выделении объекта мышью, его цвет не меняется, хотя все остальные функции - перемещение объекта и т.п. по-прежнему работают. Поэтому возник вопрос - что нужно исправить, чтобы код заработал?

Пробовал сделать вот так:

if(isSelected())
{
    QColor red=QColor(255,0,0);
   painter->setPen(red);
}

Но результат по-прежнему печален.


попробуй так

void Shape::paint(QPainter *painter,
                    const QStyleOptionGraphicsItem *option,
                    QWidget *widget)
{
//проверка на выделение если выделен - красный контур
if(isSelected())
{
   painter->setPen(Qt::red);
  
}
else
{
    painter->setPen(Qt::black);
}
/////////////////////////////////////////////////////

painter->drawPath(m_shape);//сформированный контур объекта

painter->drawText(m_shape.boundingRect(), name);//имя объекта
}

tux-eda
()
Ответ на: комментарий от tux-eda

Ваш код заработал как надо. Странно только, что предыдущий работал в Windows) В любом случае, огромное спасибо! :)

gwyllum
() автор топика

Я может быть чего-то не догоняю - давно не прогал на Qt, но мне кажется нелогичным, что ты сначала выставляешь Pen в Qt::red или в Qt::black, а потом создаешь новый pen и им перетираешь то, что уже выставил

я бы на твоем месте задался вопросом, почему оно на оффтопике работает, а не почему не работает на онтопике

EugeneBas ★★
()

Ты сначала задаешь нужный цвет у «пера» (setPen в блоке if), а потом задаешь перо еще раз... убери второй вызов setPen, и все должно заработать...

solovey ★★
()

давно код пишешь? зачем в твоём коде две строчки?

QPen pen;

painter->setPen(pen);

tux-eda
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.