В моем приложении есть QAction, скажем, его зовут GuiWorkerAction, когда он запускается, он рисует некоторые графики в QGraphicsView. В какой-то момент для продолжения действия требуется регион, скажем, имя региона — inputROI, получаемый с помощью мыши для рисования в графическом представлении.
Если действие GuiWorkerAction не выполняет работу с графическим интерфейсом, я могу запустить это действие в другом потоке и дождаться его завершения. Но когда он отображает элементы GUI, идея нового потока просто содержит основной поток GUI для отображения чего-либо.
Слот для GuiWorkerAction похож на:
QGraphicsRectItem *rect = new
QGraphicsRectItem(QRectF(QPointF(x,0),QPointF(x+100,100)));
rect->setPen(QPen(Qt::red));
rect->setBrush(QBrush(Qt::gray,Qt::SolidPattern));
scene->addItem(rect);
//###### here wait for user interaction ######//
//say we need a circle from user drawing
Circle* circle = wait_for_circle_from_user_drawing();
//continue to draw other items for GuiWorkerAction
QGraphicsTextItem* text = scene->addText("bogotobogo.com",
QFont("Arial", 20) );
text->setFlag(QGraphicsItem::ItemIsMovable);
scene->addItem(rect);}
Сложность состоит в том, что действие GuiWorkerAction должно ожидать ввода пользователя, но, поскольку оно находится в основном потоке графического интерфейса, если оно ожидает, то его пользователь не может ничего рисовать в представлении с помощью мыши.
Итак, как я могу решить эту проблему?
Задача ещё не решена.
Других решений пока нет …