crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

barabaka
  опции профиля:
сообщение 14.11.2011, 12:17
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  


Здравствуйте.Вопрос следующий: у меня есть QGraphicsRectItem,в который я добавляю объекты с помощью addRect() прямо в классе главного окна приложения.После этого я получаю их список с помощью items() и потом мне в моей программе по условию надо нарисовать на них текст.Это можно сделать без сабклассов? Чтобы просто с помощью указателя на айтем нарисовать текст на нём?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 15)
wiz29
  опции профиля:
сообщение 14.11.2011, 12:58
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


вопрос не совсем понятен. возможно лучше просто использовать QGraphicsTextItem вместо QGraphicsRectItem.

в любом случае без преобразования к конкретному типу не получится ничего сделать в QGraphicsItem нет методов по установки текста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
barabaka
  опции профиля:
сообщение 14.11.2011, 16:20
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  


Да. Метод Items() возвращает список QGraphicsItems. Потом я делаю итератор для этого списка и кладу их в новый список QList<QraphicsRectItems*> с приведением типа к QGraphicsRectItem*.Просто у меня есть класс внутрь которого я передаю указатели на эти прямоугольники и мне внутри него надо их раскрашивать. Вопрос : мне кроме смены цвета прямоугольников надо текст в них разный вставлять. Так вот как это сделать? Просто в QGraphicsTextItem вроде нельзя фон менять
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 14.11.2011, 16:30
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


как вариант можно сделать дочерний элемент с текстом для каждого прямоугольника.
но по моему было бы проще переопределить процедуру рисования элемента, либо возможно, можно использовать QGraphicsPixmapItem для прямоугольников (но этот вариант уже зависит от задачи).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
barabaka
  опции профиля:
сообщение 14.11.2011, 16:37
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  


Для переопределения рисования надо сабкласс делать? Если да то смогу я использовать родительский конструктор? и затем просто менять текст на прямоугольниках ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
barabaka
  опции профиля:
сообщение 14.11.2011, 21:02
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  


Спасибо за ответы.У меня получилось с субклассом от RectItem.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
barabaka
  опции профиля:
сообщение 15.11.2011, 3:16
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  


Не получилось.один прямоугольник с текстом на сцену я добавил.
void MyRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    QPen pen;pen.setColor(Qt::cyan);
    QBrush br(Qt::BackgroundColorRole);
    QRectF rec=this->rect();

    painter->drawRect(20,20,20,20);
}


прямоугольника нет.задача следующая:есть на форме прямоугольник QGraphicsView.Я хочу его заполнить идущими подряд равными по ширине прямоугольниками,для которых хочу менять цвет и устанавливать текст.Это индикатор буфера.

конструктор прямоугольника
MyRect::MyRect(qreal x,qreal y,qreal w,qreal h):QGraphicsRectItem(x,y,w,h)
{
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 15.11.2011, 9:09
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


в чем состоит проблема?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
barabaka
  опции профиля:
сообщение 15.11.2011, 11:58
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  


В том что прямоугольник не рисуется.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 15.11.2011, 12:13
Сообщение #10


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(barabaka @ 15.11.2011, 12:58) *
В том что прямоугольник не рисуется.

void MyRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    QPen pen;
    pen.setColor(Qt::cyan);
    QBrush br(Qt::BackgroundColorRole);
    QRectF rec=this->rect();
    
    painter->setPen(pen);//add this line
    painter->drawRect(20,20,20,20);
}


Сообщение отредактировал wiz29 - 15.11.2011, 12:13
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
barabaka
  опции профиля:
сообщение 15.11.2011, 12:45
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  



MainWindow.cpp

QRectF sr=ui->graphicsView->rect(); 
for(int i=0;i<buf;i++)
 {
     MyRect *mr=new MyRect(sr.left()*i,0.0,sr.width()/buf,sr.height());
     mr->setText("Hi");
     qscene->addItem(mr);
 }


MyRect.cpp

MyRect::MyRect(qreal x,qreal y,qreal w,qreal h):QGraphicsRectItem(x,y,w,h)
{
    mystring="!";
    rectf.setRect(x,y,w,h);
}
void MyRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->drawRect(rectf.x(),rectf.y(),rectf.width(),rectf.height());     painter->drawText(0,0,13.8,20.2,Qt::AlignCenter,mystring);
}


почему рисуется только один прямоугольник? правильной ширины,но один
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 15.11.2011, 12:56
Сообщение #12


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


наверное потому что код должен быть таким
QRectF sr=ui->graphicsView->rect(); 
qreal dx = sr.width() / buf;
for(int i=0;i<buf;i++)
 {
     MyRect *mr=new MyRect(0.0,0.0, dx ,sr.height());
     mr->setText("Hi");   
     qscene->addItem(mr);
     mr->setPos(rect.left() + i * dx, 0.0);
 }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
barabaka
  опции профиля:
сообщение 15.11.2011, 13:03
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  


Спасибо огромное!

вместо rect.left() --> sr.left()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
barabaka
  опции профиля:
сообщение 15.11.2011, 14:57
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  


QList<QGraphicsItem *> glist=qscene->items(); 
(MyRect*)glist.at(0)->setbrush(brush);


не меняет цвета прямоугольника.почему?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 15.11.2011, 20:45
Сообщение #15


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(barabaka @ 15.11.2011, 15:57) *
QList<QGraphicsItem *> glist=qscene->items(); 
(MyRect*)glist.at(0)->setbrush(brush);


не меняет цвета прямоугольника.почему?

наверное потому что код должен быть таким
void MyRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
     painter->setBrush(brush());
     painter->setPen(pen());
     painter->drawRect(rectf.x(),rectf.y(),rectf.width(),rectf.height());
     painter->drawText(0,0,13.8,20.2,Qt::AlignCenter,mystring);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
barabaka
  опции профиля:
сообщение 16.11.2011, 0:30
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 40
Регистрация: 14.11.2011
Из: Санкт-Петербург
Пользователь №: 2999

Спасибо сказали: 1 раз(а)




Репутация:   2  


Можно закрывать тему.Всё работает. ^_^
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 13.7.2025, 15:49