qt5之QDialog支持拖放
程序员文章站
2022-03-15 21:07:01
...
QDialog 对象 的窗体 若需要 能 拖放, 需要设置:
1、设置窗体属性
setAcceptDrops(true);
2、重写函数
dragEnterEvent
void dragEnterEvent(QDragEnterEvent*event);
dropEvent
void dropEvent(QDropEvent*event);
3、示例
我这里 设置为 仅能支持 拖放 *.db 文件, 即 sqlite3数据库文件
关键代码
if(!event->mimeData()->urls()[0].fileName().right(2).compare("db") )
函数源码
// 拖动进入事件
void Dialog::dragEnterEvent(QDragEnterEvent *event)
{
// 这里,只接受 sqlite3 格式的数据库文件 *。db
if(!event->mimeData()->urls()[0].fileName().right(2).compare("db") )
{
event->acceptProposedAction();
}
else
{
event->ignore();//否则不接受鼠标事件
}
}
,注意,下面的函数中 ,虽然很长,但是 函数体开始的地方 有自定义代码开始的标志, 该标志后的代码都是自定义的
void Dialog::dropEvent(QDropEvent *event)
{
/// 下面为自定义代码
///---------------------------------------------------------
// 1、若配置文件路径变量不为空,则说明已经有数据库文件了
if (false == configFilePath.isEmpty())
{
QFileInfo fileInfo(configFilePath);
bool isExistConfigFile = fileInfo.isFile();
// 1.1 若不存在该文件
if (false == isExistConfigFile)
{
#ifdef QT_DEBUG
qDebug() << "不存在该文件";
#endif //QT_DEBUG
}
// 1.2 存在该文件
else
{
// 若数据库打开,则关闭
bool isOpen = sqliteDatabase.isOpen();
if (true == isOpen)
{
sqliteDatabase.close();
#ifdef QT_DEBUG
qDebug() << "数据库已经打开,现在已经关闭";
#endif //QT_DEBUG
}
// 将数据库路径设置空
configFilePath = QString("");
}
}
// 获取MIMEData
const QMimeData *qm = event->mimeData();
// 得到拖拽的文件路径
QString dragFilePath = qm->urls()[0].toLocalFile();
//-----------------------------------------------------------------
// 检查dev tab
// 0、检查外设标签是否添加
bool isAddDev = GetAddDevTabFlag();
// 0.1 添加了
if (true == isAddDev)
{
// 外设窗体中文件打开没有关闭
bool devFileIsOepn = devDialog->GetFileIsOpen();
if (true == devFileIsOepn)
{
int okcancel = QMessageBox::warning(this, tr("tip"), tr("dev file has opended, do U wanna go?"), QMessageBox::Ok | QMessageBox::Cancel);
// 若选择否
if (QMessageBox::Cancel == okcancel)
{
// 选择否,不继续打开新的文件
return;
}
// 选择是,则继续
}
// 检查文件是否关闭
devDialog->CheckFileClose();
}
// 尝试打开文件
PreOpenFile();
// 3、尝试打开并获取文件内容
OpenFile(dragFilePath);
}
上一篇: 全新面部识别软件面市 社会各界褒贬不一
下一篇: 是生活触动了Ta们的幽默神经
推荐阅读