Есть ли способ передать значение из QString в QGraphicsTextItem?

129
02 января 2021, 05:00

Делаю график в 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);
Answer 1

Нашел решение. Вместо 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(...);
}
READ ALSO
Qt LineEdit search in the site

Qt LineEdit search in the site

В моем приложении у меня есть LineEdit и мне нужно при вводе, к примеру - "Собака" на определенном сайте выводился результат поискаПодскажите пожалуйста...

119
Как повернуть спрайт не от нижнего левого угла?

Как повернуть спрайт не от нижнего левого угла?

Переписал на си функцию glm::rotate, теперь хочу сделать так, чтобы можно было повернуть изображение относительно другой координаты, а не координаты...

115
Qt/C++ Как &ldquo;перевернуть&rdquo; строку по вертикали?

Qt/C++ Как “перевернуть” строку по вертикали?

Делаю график на QtНужно подписать координатную ось ОY

113