Я изучаю сигналы/слоты в Qt и обнаружил проблему. Мне нужно создать собственный слот, который вызывается при перемещении или выборе элементов в QGraphicsScene (в QGraphicsView).
Я начинаю с простого приложения, в котором есть один виджет, а на нем — GraphicsView и ярлык. Я создал слот в своем окне и подключил его к сигналу QGraphicsScene, но он не используется. Где моя ошибка?
Вот код:
//MainWindow.h
//as generated by QtCreator, just added one slot to it
...omitted for brevity...
public slots:
void selectedItemChanged(QGraphicsItem * newItem, QgraphicsItem * oldItem);
..omitted for brevity...
//------------------------------------------------------------------
//MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsScene * scene = new QGraphicsScene();
scene->setBackgroundBrush (QBrush(Qt::gray));
ui->graphicsView->setScene (scene);
for(int x = 10; x < 250; x+=20)
{
QGraphicsEllipseItem * item = scene->addEllipse (x,x,5,5,QPen(Qt::darkGreen),QBrush(Qt::darkGreen));
item->setFlag (QGraphicsItem::ItemIsFocusable,true);
}
QObject::connect (scene,SIGNAL(focusItemChanged),this,SLOT(selectedItemChanged));
}
void MainWindow::selectedItemChanged (QGraphicsItem *newItem, QGraphicsItem *oldItem)
{
qDebug()<<"called";
if(newItem == 0)
{
ui->label->setText ("Není vybrán bod");
}
else
{
ui->label->setText (QString::number (newItem->scenePos ().x ()) + "," + QString::number (newItem->scenePos ().y ()));
}
}
Теперь, когда я запускаю программу, она работает нормально, но я не могу установить фокус на круги (эллипсы), нарисованные на сцене, и слот не используется. Пробовал ставить флаг IsSelectable, не помогает. Есть ли другой предпочтительный способ сделать это или решить мою проблему?
void QGraphicsScene::focusItemChanged(QGraphicsItem * newFocus, QGraphicsItem * oldFocus, Qt::FocusReason reason)
- person Marco A.   schedule 17.10.2014