Делаю график в Qt.Нужно подписать координатные оси. Делаю это в цикле c помощью QGraphicsTextItem, так как обычное QGraphicsScene->addText () не позволяет задать координаты надписей.
Нашел в Интернете пример объявления такого QGraphicsTextItem:
QGraphicsTextItem *textItem = new QGraphicsTextItem("I'm text.", 0, 0);
textItem->setPos(67, 90);
scene->addItem(textItem);
Но мне нужно передать в QGraphicsTextItem не просто строку в кавычках, а значение QString str. И вот тут-то мне и выдает ошибку
no matching function for call to 'QGraphicsTextItem::QGraphicsTextItem(QString*&, int, int)'
Пробовал передавать так:
OXText = new QGraphicsTextItem (str, 0,0);
Я так понимаю, что такого вызова нет в конструкторе QGraphicsTextItem, поэтому компилятор и ругается, но может есть способ для того, чтобы передать в QGraphicsTextItem готовую надпись из str?
Полный фрагмент кода.
В заголовочном файле
double xmin;
double dx;
double xmax;
QGraphicsTextItem *OXText;
В файле .cpp
xmin = 0.0;
xmax = 2.0;
dx = 0.05;
QString *str =new QString;
for (int i =1; i<10;i++){
double OX = (xmin + i*dx)/10;
str->number(OX);
OXText = new QGraphicsTextItem (str, 0,0);
OXText->setPos(100*i,100*i);
graphicsScene->addItem(OXText);
}
Обновление: сделал из QString * str просто QString str. Ошибок не выдает, но и надпись почему-то не выводит.
Мой обновленный код
xmin = 0.0;
xmax = 2.0;
dx = 0.05;
QString str ="";
for (int i =1; i<10;i++){
double OX = (xmin + i*dx)/10;
str.number(OX);
OXText = new QGraphicsTextItem (str, 0,0);
OXText->setPos(50*i,graphicsScene->height()-50);
graphicsScene->addItem(OXText);
Нашел решение. Вместо str.number (OX); Нужно написать str.setNum(OX) В итоге код подписи оси:
xmin = 0.0;
xmax = 2.0;
dx = 0.05;
for (int i =1; i<10;i++){
double OX = (xmin + i*dx)/10;
QString str;
str.setNum(OX);
OXText = new QGraphicsTextItem (str, 0,0);
OXText->setPos(50*i,graphicsScene->height()-50);
graphicsScene->addItem(OXText);
}
Еще одно решение, спасибо @BeardedBeaver за решение в одну строку кода в цикле
xmin = 0.0-dx;
xmax = 2.0;
dx = 0.5;
for (int i =1; i<10;i++){
graphicsScene->addText(QString::number((xmin + i*dx)/10))->setPos(...);
}
Продвижение своими сайтами как стратегия роста и независимости