Я новичок в Qt Creator и программировании в целом, и я пытаюсь создать приложение, в котором у меня есть список параметров цвета и область, где я могу перетащить эти параметры и создать графический элемент с цветом, который я выбрал, вот код:
Я создал QListWidget
и добавил два QListWidgetItem
itens на данный момент:
OptionList::OptionList(QWidget *parent) : QListWidget(parent)
{
this->setDragEnabled(true);
this->setDropIndicatorShown(true);
this->setSelectionMode(QAbstractItemView::SingleSelection);
this->setDefaultDropAction(Qt::CopyAction);
this->setViewMode(QListView::ListMode);
QListWidgetItem *blue = new QListWidgetItem;
blue->setText("Blue");
blue->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable |
Qt::ItemIsDragEnabled);
addItem(blue);
QListWidgetItem *red = new QListWidgetItem;
red->setText("Red");
red->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable |
Qt::ItemIsDragEnabled);
addItem(red);
}
Я создал QgraphicsPathItem
, который получает строку, в зависимости отстрока, она меняет цвет
Block::Block(QString color, QGraphicsItem *parent) : QGraphicsPathItem(parent)
{
QPainterPath p;
p.addRoundedRect(0, 0, 150, 50, 2, 2);
setPath(p);
setPen(QPen(Qt::black));
if (color == "Blue")
{
setBrush(Qt::blue);
}
else if (color == "Red")
{
setBrush(Qt::red);
}
setFlag(QGraphicsItem::ItemIsMovable);
setFlag(QGraphicsItem::ItemIsSelectable);
}
, затем я создал MyScene
класс, полученный из QGraphicsScene
, и переопределил dragEnterEvent
, dragMoveEvent
и dropEvent
#include "myscene.h"
MyScene::MyScene()
{
setBackgroundBrush(Qt::lightGray);
}
void MyScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
event->setAccepted(true);
}
void MyScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
{
event->setAccepted(true);
}
void MyScene::dropEvent(QGraphicsSceneDragDropEvent *event)
{
QString color;
color = event->mimeData()->text();
Block *newBlock = new Block(color);
QPointF posView = event->scenePos();
newBlock->setPos(posView);
addItem(newBlock);
}
Я пытался использовать QString color; color = event->mimeData()->text();
, но он не работает
Я знаю, что это как-то связано с классом QMimeData
, но я не знаю, что делать
Как я могуполучить текст из элемента в списке и передать его в класс Block, чтобы изменить его цвет?