我尝试在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);
}
答案 0 :(得分:0)
嗯,看起来你正在为每个项目选择创建一个新场景?
这不是一个很好的方式:)
最好做到以下几点:
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));
}
这样您就不会在每个项目选择上创建新场景。实际上你需要一个场景和一个项目,不需要一遍又一遍地创建它们,并像现在一样将它们叠加到另一个场景上。
干杯:)