QGraphicsView пропускает текст на некоторых рисунках - PullRequest
0 голосов
/ 05 февраля 2010

Я попытался нарисовать прямоугольник с текстом внутри в QGraphicsView. Я получаю текст от текущего выбранного элемента в QTreeWidget. Сцена, кажется, время от времени показывает текст, иногда это будет, иногда нет.

void MainWindow::on_treewidget_itemSelectionChanged()
{
drawSectionFromProperties(ui->treewidget->currentItem());
}

void MainWindow::drawSectionFromProperties(QTreeWidgetItem *section)
{
        ui->graphicsview->setScene(new QGraphicsScene());
        ui->graphicsview->scene()->addRect(0,0,200,300,QPen(QColor(0,0,0)),QBrush(QColor(255,250,129)));
        QFont objectTitle;
        ui->graphicsview->scene()->addSimpleText(section->text(0),objectTitle);
}

1 Ответ

0 голосов
/ 05 февраля 2010

Хм, похоже, вы создаете новую сцену для каждого выбора элемента?

Это не очень хороший путь:)

Лучше сделать следующее:

  1. Создайте 'QGraphicsScene * m_scene;' и члены данных 'QGraphicsSimpleTextItem * m_textItem' в закрытом разделе вашего класса MainWindow.
  2. В MainWindow :: drawSectionFromProperties () сделать что-то вроде:

MainWindow::MainWindow(QWidget* parent, ...)
   : m_scene(0), m_textItem(0) 
{
...
}

// leave your on_treewidget_itemSelectionChanged as is

void MainWindow::drawSectionFromProperties(QTreeWidgetItem *section) 
{ 
    // setup things only ONE time on the first call
    if(!m_scene)
    {
        m_scene = new QGraphicsScene();
        ui->graphicsview->setScene(m_scene);
        m_textItem = ui->graphicsview->scene()->addSimpleText(QString());
    }

    // here only change text of existing item
    m_textItem->setText(section->text(0));
}

Таким образом, вы не будете создавать новую сцену при каждом выборе элемента. На самом деле вам нужна ОДНА сцена и ОДИН предмет в ней, нет необходимости создавать их снова и снова и снова и накладывать одну на другую, как вы в настоящее время делаете.

Приветствия:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...