Хочу сделать перенос из списка в таблицу. Строка из списка должна записываться в первый столбец. Захват из QListWidget происходит, но почему-то не переносится в QTableWidget. Пробовал переносить в ворд, всё нормально. QListWidgetWithDrop.cpp | Код | #include "qlistwidgetwithdrop.h" #include <QtGui>
QListWidgetWithDrop::QListWidgetWithDrop(QWidget *parent) : QListWidget(parent) { setDragEnabled(true); } //-----------------------------------------------------------------------------------------------
void QListWidgetWithDrop::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) startPos = event->pos(); QListWidget::mousePressEvent(event);
} //-----------------------------------------------------------------------------------------------
void QListWidgetWithDrop::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton) { int distance = (event->pos() - startPos).manhattanLength(); if (distance >= QApplication::startDragDistance()) { performDrag(); } } QListWidget::mouseMoveEvent(event); } //-----------------------------------------------------------------------------------------------
void QListWidgetWithDrop::performDrag() { QListWidgetItem *item = currentItem(); if (item) { QMimeData *mimeData = new QMimeData; mimeData->setText(item->text());
QDrag *drag = new QDrag(this); drag->setMimeData(mimeData); if (drag->exec(Qt::MoveAction) == Qt::MoveAction) delete item; } }
|
QTableWidgetWithDrop.cpp | Код | #include "qtablewidgetwithdrop.h" #include "portfoliodelegate.h" #include <QtGui>
QTableWidgetWithDrop::QTableWidgetWithDrop(QWidget *parent) : QTableWidget(parent) { this->setSelectionMode(QAbstractItemView::SingleSelection); this->setSelectionBehavior(QAbstractItemView::SelectRows); setAcceptDrops(true); setItemDelegate(new PortfolioDelegate(this)); } //------------------------------------------------------------------------------------------------
void QTableWidgetWithDrop::addItemToSstructPortfolioTable( int row, QString name) { QTableWidgetItem *title = new QTableWidgetItem; title->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); this->setItem(row, 0, title); this->item(row,0)->setText(name);
QTableWidgetItem *reliability = new QTableWidgetItem; this->setItem(row, 1, reliability); this->item(row,1)->setText(tr("0.001"));
QTableWidgetItem *priceNow = new QTableWidgetItem; this->setItem(row, 2, priceNow); this->item(row,2)->setText(tr("1"));
QTableWidgetItem *priceFuture = new QTableWidgetItem; this->setItem(row, 3, priceFuture); this->item(row,3)->setText(tr("2"));
QPushButton *delButton = new QPushButton(tr("X"), this); delButton->setWhatsThis(tr("Удалить")); connect(delButton, SIGNAL(clicked()), this, SLOT(deleteFundFromTablePortfolio())); this->setCellWidget(row, 4, delButton); delButtons.append(delButton);
} //-----------------------------------------------------------------------------------------------
void QTableWidgetWithDrop::deleteFundFromTablePortfolio() { int row;
//найти кнопку, по которой кликнули row = delButtons.indexOf(dynamic_cast<QPushButton*> (sender()) );
//если нашли, то удалить строчку if(row > -1) { this->removeRow(row); delButtons.removeAt(row);
//сдвинуть фокус if(row < this->rowCount()) this->setCurrentCell(row,4); else if(row >= 0) this->setCurrentCell(row-1,4);
}
}
//------------------------------------------------------------------------------------------------ void QTableWidgetWithDrop::dragEnterEvent(QDragEnterEvent *event) {
if (event->mimeData()->hasFormat("text/plain")) { event->setDropAction(Qt::MoveAction); event->accept(); }
} //------------------------------------------------------------------------------------------------
void QTableWidgetWithDrop::dropEvent(QDropEvent *event) { this->setRowCount(this->rowCount() + 1); addItemToSstructPortfolioTable( this->rowCount() - 1, event->mimeData()->text()); event->setDropAction(Qt::MoveAction); event->accept(); } //------------------------------------------------------------------------------------------------
|
|