⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 q3filedialog.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    if (fi.isDir() && itemRect(item).contains(pnt))        return true;    return false;}void QFileListBox::setCurrentDropItem(const QPoint &pnt){    changeDirTimer->stop();    Q3ListBoxItem *item = 0;    if (pnt != QPoint(-1, -1))        item = itemAt(pnt);    if (item && !QUrlInfo(filedialog->d->url.info(item->text().isEmpty() ? QString::fromLatin1(".") : item->text())).isDir())        item = 0;    if (item && !itemRect(item).contains(pnt))        item = 0;    currDropItem = item;    if (currDropItem)        setCurrentItem(currDropItem);    changeDirTimer->start(750);}#endif // QT_NO_DRAGANDDROPvoid QFileListBox::changeDirDuringDrag(){#ifndef QT_NO_DRAGANDDROP    if (!currDropItem)        return;    changeDirTimer->stop();    Q3Url u(filedialog->d->url, Q3FileDialogPrivate::encodeFileName(currDropItem->text()));    filedialog->setDir(u);    currDropItem = 0;#endif}void QFileListBox::doubleClickTimeout(){    startRename();    renameTimer->stop();}void QFileListBox::startRename(bool check){    if (check && (!renameItem || renameItem != item(currentItem())))        return;    int i = currentItem();    setSelected(i, true);    QRect r = itemRect(item(i));    int bdr = item(i)->pixmap() ?              item(i)->pixmap()->width() : 16;    int x = r.x() + bdr;    int y = r.y();    int w = item(i)->width(this) - bdr;    int h = qMax(lined->height() + 2, r.height());    y = y + r.height() / 2 - h / 2;    lined->parentWidget()->setGeometry(x, y, w + 6, h);    lined->setFocus();    lined->setText(item(i)->text());    lined->selectAll();    lined->setFrame(false);    lined->parentWidget()->show();    viewport()->setFocusProxy(lined);    renaming = true;}void QFileListBox::clear(){    cancelRename();    Q3ListBox::clear();}void QFileListBox::rename(){    if (!lined->text().isEmpty()) {        QString file = currentText();        if (lined->text() != file)            filedialog->d->url.rename(file, lined->text());    }    cancelRename();}void QFileListBox::cancelRename(){    renameItem = 0;    lined->parentWidget()->hide();    viewport()->setFocusProxy(this);    renaming = false;    updateItem(currentItem());    if (lined->hasFocus())        viewport()->setFocus();}void QFileListBox::contentsMoved(int, int){    changeDirTimer->stop();#ifndef QT_NO_DRAGANDDROP    setCurrentDropItem(QPoint(-1, -1));#endif}/************************************************************************ * * Internal class QFileListView * ************************************************************************/Q3FileDialogQFileListView::Q3FileDialogQFileListView(QWidget *parent, Q3FileDialog *dlg)    : Q3ListView(parent, "qt_filedlg_listview"), renaming(false), renameItem(0),    filedialog(dlg), mousePressed(false),    firstMousePressEvent(true){    changeDirTimer = new QTimer(this);    Q3VBox *box = new Q3VBox(viewport(), "qt_vbox");    box->setFrameStyle(QFrame::Box | QFrame::Plain);    lined = new QRenameEdit(box);    lined->setFixedHeight(lined->sizeHint().height());    box->hide();    box->setBackgroundRole(QPalette::Base);    renameTimer = new QTimer(this);    connect(lined, SIGNAL(doRename()),             this, SLOT (rename()));    connect(lined, SIGNAL(cancelRename()),             this, SLOT(cancelRename()));    header()->setMovingEnabled(false);    connect(renameTimer, SIGNAL(timeout()),             this, SLOT(doubleClickTimeout()));    connect(changeDirTimer, SIGNAL(timeout()),             this, SLOT(changeDirDuringDrag()));    disconnect(header(), SIGNAL(sectionClicked(int)),                this, SLOT(changeSortColumn(int)));    connect(header(), SIGNAL(sectionClicked(int)),             this, SLOT(changeSortColumn2(int)));    connect(this, SIGNAL(contentsMoving(int,int)),             this, SLOT(contentsMoved(int,int)));    viewport()->setAcceptDrops(true);    sortcolumn = 0;    ascending = true;    dragItem = 0;}void Q3FileDialogQFileListView::setSorting(int column, bool increasing){    if (column == -1) {        Q3ListView::setSorting(column, increasing);        return;    }    sortAscending = ascending = increasing;    sortcolumn = column;    switch (column) {    case 0:        sortFilesBy = QDir::Name;        break;    case 1:        sortFilesBy = QDir::Size;        break;    case 3:        sortFilesBy = QDir::Time;        break;    default:        sortFilesBy = QDir::Name; // #### ???        break;    }    filedialog->resortDir();}void Q3FileDialogQFileListView::changeSortColumn2(int column){    int lcol = header()->mapToLogical(column);    setSorting(lcol, sortcolumn == lcol ? !ascending : true);}void Q3FileDialogQFileListView::keyPressEvent(QKeyEvent *e){    if ((e->key() == Qt::Key_Enter ||           e->key() == Qt::Key_Return) &&         renaming)        return;    QString keyPressed = e->text().toLower();    QChar keyChar = keyPressed[0];    if (keyChar.isLetterOrNumber()) {        Q3ListViewItem * i = 0;        if (currentItem())        i = currentItem();        else        i = firstChild();        if (i->nextSibling())        i = i->nextSibling();        else        i = firstChild();        while (i != currentItem()) {            QString it = i->text(0);            if (it[0].toLower() == keyChar) {            clearSelection();            ensureItemVisible(i);            setCurrentItem(i);            } else {            if (i->nextSibling())            i = i->nextSibling();            else            i = firstChild();            }        }        return;    }    cancelRename();    Q3ListView::keyPressEvent(e);}void Q3FileDialogQFileListView::viewportMousePressEvent(QMouseEvent *e){    pressPos = e->pos();    mousePressed = false;    bool didRename = renaming;    cancelRename();    if (!hasFocus() && !viewport()->hasFocus())        setFocus();    if (e->button() != Qt::LeftButton) {        Q3ListView::viewportMousePressEvent(e);        firstMousePressEvent = false;        return;    }    Q3ListViewItem *i = currentItem();    Q3ListView::viewportMousePressEvent(e);    Q3FileDialogPrivate::File *i1 = (Q3FileDialogPrivate::File*)currentItem();    if (i1)        mousePressed = !i1->info.isDir() || (filedialog->mode() == Q3FileDialog::Directory) || (filedialog->mode() == Q3FileDialog::DirectoryOnly);    if (itemAt(e->pos()) != i ||         e->x() + contentsX() > columnWidth(0)) {        firstMousePressEvent = false;        return;    }    if (!firstMousePressEvent && !didRename && i == currentItem() && currentItem() &&         QUrlInfo(filedialog->d->url.info(QString(QLatin1Char('.')))).isWritable() && currentItem()->text(0) != QLatin1String("..")) {        renameTimer->start(QApplication::doubleClickInterval(), true);        renameItem = currentItem();    }    firstMousePressEvent = false;}void Q3FileDialogQFileListView::viewportMouseDoubleClickEvent(QMouseEvent *e){    renameTimer->stop();    Q3ListView::viewportMouseDoubleClickEvent(e);}void Q3FileDialogQFileListView::viewportMouseReleaseEvent(QMouseEvent *e){    Q3ListView::viewportMouseReleaseEvent(e);    mousePressed = false;    dragItem = 0;}void Q3FileDialogQFileListView::viewportMouseMoveEvent(QMouseEvent *e){    renameTimer->stop();    if (!dragItem)        dragItem = itemAt(e->pos());#ifndef QT_NO_DRAGANDDROP    if ( (pressPos - e->pos()).manhattanLength() > QApplication::startDragDistance() && mousePressed) {        Q3ListViewItem *item = dragItem;        dragItem = 0;        if (item) {            Q3UriDrag* drag = new Q3UriDrag(viewport());            QStringList files;            if (filedialog->mode() == Q3FileDialog::ExistingFiles)                files = filedialog->selectedFiles();            else                files = QStringList(filedialog->selectedFile());            drag->setFileNames(files);            if (lined->isVisible())                cancelRename();            connect(drag, SIGNAL(destroyed()),                     this, SLOT(dragObjDestroyed()));            drag->drag();            mousePressed = false;        }    }#endif}void Q3FileDialogQFileListView::dragObjDestroyed(){#ifndef QT_NO_DRAGANDDROP    //######    //filedialog->rereadDir();#endif}#ifndef QT_NO_DRAGANDDROPvoid Q3FileDialogQFileListView::viewportDragEnterEvent(QDragEnterEvent *e){    startDragUrl = filedialog->d->url;    startDragDir = filedialog->dirPath();    currDropItem = 0;    if (!Q3UriDrag::canDecode(e)) {        e->ignore();        return;    }    QStringList l;    Q3UriDrag::decodeLocalFiles(e, l);    urls = (int)l.count();    if (acceptDrop(e->pos(), e->source())) {        e->accept();        setCurrentDropItem(e->pos());    } else {        e->ignore();        setCurrentDropItem(QPoint(-1, -1));    }    oldDragPos = e->pos();}void Q3FileDialogQFileListView::viewportDragMoveEvent(QDragMoveEvent *e){    if (acceptDrop(e->pos(), e->source())) {        if (oldDragPos != e->pos())            setCurrentDropItem(e->pos());        switch (e->action()) {        case QDropEvent::Copy:            e->acceptAction();            break;        case QDropEvent::Move:            e->acceptAction();            break;        case QDropEvent::Link:            break;        default:            break;        }    } else {        changeDirTimer->stop();        e->ignore();        setCurrentDropItem(QPoint(-1, -1));    }    oldDragPos = e->pos();}void Q3FileDialogQFileListView::viewportDragLeaveEvent(QDragLeaveEvent *){    changeDirTimer->stop();    setCurrentDropItem(QPoint(-1, -1));//########//     if (startDragDir != filedialog->d->url)//        filedialog->setUrl(startDragUrl);}void Q3FileDialogQFileListView::viewportDropEvent(QDropEvent *e){    changeDirTimer->stop();    if (!Q3UriDrag::canDecode(e)) {        e->ignore();        return;    }    QStringList l;    Q3UriDrag::decodeToUnicodeUris(e, l);    bool move = e->action() == QDropEvent::Move;//     bool supportAction = move || e->action() == QDropEvent::Copy;    Q3UrlOperator dest;    if (currDropItem)        dest = Q3UrlOperator(filedialog->d->url, Q3FileDialogPrivate::encodeFileName(currDropItem->text(0)));    else        dest = filedialog->d->url;    filedialog->d->url.copy(l, dest, move);    // ##### what is supportAction for?    e->acceptAction();    currDropItem = 0;}bool Q3FileDialogQFileListView::acceptDrop(const QPoint &pnt, QWidget *source){    Q3ListViewItem *item = itemAt(pnt);    if (!item || item && !itemRect(item).contains(pnt)) {        if (source == viewport() && startDragDir == filedialog->dirPath())            return false;        return true;    }    QUrlInfo fi(filedialog->d->url.info(item->text(0).isEmpty() ? QString::fromLatin1(".") : item->text(0)));    if (fi.isDir() && itemRect(item).contains(pnt))        return true;    return false;}void Q3FileDialogQFileListView::setCurrentDropItem(const QPoint &pnt){    changeDirTimer->stop();    Q3ListViewItem *item = itemAt(pnt);    if (pnt == QPoint(-1, -1))        item = 0;    if (item && !QUrlInfo(filedialog->d->url.info(item->text(0).isEmpty() ? QString::fromLatin1(".") : item->text(0))).isDir())        item = 0;    if (item && !itemRect(item).contains(pnt))        item = 0;    currDropItem = item;    if (currDropItem)        setCurrentItem(currDropItem);    changeDirTimer->start(750);}#endif // QT_NO_DRAGANDDROPvoid Q3FileDialogQFileListView::changeDirDuringDrag(){#ifndef QT_NO_DRAGANDDROP    if (!currDropItem)        return;    changeDirTimer->stop();    Q3Url u(filedialog->d->url, Q3FileDialogPrivate::encodeFileName(currDropItem->text(0)));    filedialog->setDir(u);    currDropItem = 0;#endif // QT_NO_DRAGANDDROP}void Q3FileDialogQFileListView::doubleClickTimeout(){    startRename();    renameTimer->stop();}void Q3FileDialogQFileListView::startRename(bool check){    if (check && (!renameItem || renameItem != currentItem()))        return;    Q3ListViewItem *i = currentItem();    setSelected(i, true);    QRect r = itemRect(i);    int bdr = i->pixmap(0) ?              i->pixmap(0)->width() : 16;    int x = r.x() + bdr;    int y = r.y();    int w = columnWidth(0) - bdr;    int h = qMax(lined->height() + 2, r.height());    y = y + r.height() / 2 - h / 2;    lined->parentWidget()->setGeometry(x, y, w + 6, h);    lined->setFocus();    lined->setText(i->text(0));    lined->selectAll();    lined->setFrame(false);    lined->parentWidget()->show();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -