【发布时间】:2012-02-13 08:09:13
【问题描述】:
我在 QmainWindow 中实现了简单的拖放功能,引用取自 here 和 here
我要做的就是接受有效的 url 并在 url 删除时打开 QDialog。
但是当 url 下垂并且 QDialog 弹出时,浏览器会在后台存储,直到我关闭 QDialog 。这是错误的,浏览器应该一直免费。
这是我的代码:
void MainWindow::dragMoveEvent(QDragMoveEvent *event)
{
if (event->mimeData()->hasFormat("text/html"))
{
event->acceptProposedAction();
}
else
{
event->ignore();
}
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
// accept just text/uri-list mime format
if (event->mimeData()->hasFormat("text/html"))
{
event->acceptProposedAction();
}
else
{
event->ignore();
}
}
void MainWindow::dragLeaveEvent(QDragLeaveEvent *event)
{
event->accept();
}
void MainWindow::dropEvent(QDropEvent *event)
{
QList<QUrl> urlList;
QString fName;
QStringList pathList;
QFileInfo info;
QString suffix;
if (event->mimeData()->hasFormat("text/html"))
{
urlList = event->mimeData()->urls(); // returns list of QUrls
// if just text was dropped, urlList is empty (size == 0)
if ( urlList.size() > 0) // if at least one QUrl is present in list
{
QString url = urlList.at(0).toString();
event->acceptProposedAction();
openDialog(url); // THIS IS THE FUNCTION THAT I OPEN THE QDIALOG window
}
}
//event->acceptProposedAction();
}
void MainWindow::openDialog(QString& slink)
{
QHash<QString,QVariant> DataMap;
QString link = slink;
DataMap.insert("m_webpage",link);
PublishToDialog* pPublishToDialog = new PublishToDialog(this);
pPublishToDialog->Init(DataMap);
if(pPublishToDialog->exec() != QDialog::Accepted)
{
}
}
当我删除对 QDialog 的调用时,一切正常。 并且浏览器没有卡住。我什至按照建议再次尝试使用信号/插槽 当我在 drop 调用时启动 QDialog 时,浏览器卡住了!
【问题讨论】:
标签: c++ qt drag-and-drop