in meinem QListWidget um ein QDrag Objekt zu erstellen. Nun habe ich das Problem dass die QListWidgetItems nicht mehr markiert/selektiert werden.
Nun gibt es 2 Fragen:
- Ist es korrekt, dass die mousePressEvent Methode überschrieben wurde, resp. dass das Selektieren warscheinlich zuvor über diese Methode lief?
- Wie kann ich machen, dass die Items selektiert werden?
#include <QtGui>
#include "PatternList.h"
PatternList::PatternList(QWidget *parent) : QListWidget(parent)
{
setAcceptDrops(true); // enable drop events
new QListWidgetItem(tr("bass simple"), this);
new QListWidgetItem(tr("bass fill in"), this);
new QListWidgetItem(tr("drum1"), this);
new QListWidgetItem(tr("drum2"), this);
new QListWidgetItem(tr("drum3"), this);
new QListWidgetItem(tr("drum fill in 1"), this);
}
void PatternList::dragEnterEvent(QDragEnterEvent *event) // event which is sent to a widget when a drag and drop action enters it
{
if (event->mimeData()->hasFormat("application/x-dnditemdata"))
{
if (event->source() == this)
{
event->setDropAction(Qt::MoveAction);
event->accept();
}
else
{
event->acceptProposedAction();
}
}
else
{
event->ignore();
}
}
void PatternList::mousePressEvent(QMouseEvent *event)
{
int cRow = currentRow();
QByteArray itemData;
QDataStream dataStream(&itemData, QIODevice::WriteOnly);
dataStream << cRow; // write cRow to datastream
QPixmap *pixmap = new QPixmap(50, 30); // create picture diplayed during drag
QPainter painter;
painter.begin(pixmap);
painter.fillRect(QRectF(0, 0, 50, 30), QBrush(QColor(Qt::black), Qt::SolidPattern));
painter.end();
QMimeData *mimeData = new QMimeData;
mimeData->setData("application/x-dnditemdata", itemData); // set mime data
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->setPixmap(*pixmap);
drag->start(Qt::CopyAction | Qt::MoveAction);
}
Ja, aber ich ruf mousePressEvent vom QListWidget auf und nicht vom PatternList und somit dürfte es kein Loop geben. Hast du dir das ganze schon mal im Debugger angeschaut?
upsala hat geschrieben:Ja, aber ich ruf mousePressEvent vom QListWidget auf und nicht vom PatternList und somit dürfte es kein Loop geben. Hast du dir das ganze schon mal im Debugger angeschaut?