简介:在自定义控件中使用Qt拖放机制。
功能:拖放图片至窗口,用QLabel显示相应图片。
Qt 拖放机制的实现
步骤:要使用Qt的拖放机制,一般分三个部分:
1、启用
将自定义控件设置为能够接受drop事件。
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
label = new QLabel(this);
QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->addWidget(label);
this->setLayout(vbox);
this->resize(300,200);
//设置接收drop事件
this->setAcceptDrops(true);
}
2、重新实现dragEnterEvent()
void Widget::dragEnterEvent(QDragEnterEvent *event)
{
if(event->mimeData()->hasUrls() ){
//将drop操作设置为建议的操作。
event->acceptProposedAction();
}else
event->ignore();
}
3、重新实现dropEvent()
void Widget::dropEvent(QDropEvent *event)
{
//获取拖放事件的QUrl
QList<QUrl> urlList = event->mimeData()->urls();
//得到本地路径
QString filePath = urlList.at(0).toLocalFile();
//用路径构造QFileInfo
QFileInfo fileInfo(filePath);
//判断当前路径是否是文件
if(fileInfo.isFile()){
//获取文件类型,即后缀名
QString suffix = fileInfo.suffix();
//获取Qt支持的图片类型
QList<QByteArray> imageList = QImageReader::supportedImageFormats();
//判断文件类型是否是支持的图片类型
if(imageList.contains(suffix.toUtf8())){
//获取图片
QPixmap pixmap;
pixmap.load(filePath);
//用QLabel显示图片
label->setPixmap(pixmap);
//设置QLabel大小
label->resize(pixmap.width(),pixmap.height());
//根据label的支持调整大小
this->adjustSize();
}
}
}