QGraphicsView在一些绘图中缺少文本

时间:2010-02-05 05:17:29

标签: c++ qt

我尝试在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 :(得分:0)

嗯,看起来你正在为每个项目选择创建一个新场景?

这不是一个很好的方式:)

最好做到以下几点:

  1. 创建'QGraphicsScene * m_scene;'和MainWindow类私有部分中的'QGraphicsSimpleTextItem * m_textItem'数据成员。
  2. 在MainWindow :: drawSectionFromProperties()中执行以下操作:
  3. 
    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));
    }
    

    这样您就不会在每个项目选择上创建新场景。实际上你需要一个场景和一个项目,不需要一遍又一遍地创建它们,并像现在一样将它们叠加到另一个场景上。

    干杯:)