如何在自定义文件浏览对话框Qt C++中实现返回和下一步按钮

Posted

技术标签:

【中文标题】如何在自定义文件浏览对话框Qt C++中实现返回和下一步按钮【英文标题】:How to implement back and next button in custom file browse dialog Qt C++ 【发布时间】:2018-03-06 10:38:13 【问题描述】:

我正在实现基于 Qt 的自定义文件打开对话框,因为本机 QFileDialog 导致我的应用程序出现一些阻塞。我能够执行以下操作。

首页链接 桌面链接 父链接(向上按钮) 双击导航到目录

但是找不到怎么办

上一个链接 下一个链接

那么如何在 Qt5 中使用 C++ 做到这一点?

【问题讨论】:

您是否尝试将QFileDialog::DontUseNativeDialog传递给QFileDialog c'tor 并调用show(),而不是重写您自己的对话框?这不应该阻止您的应用程序 “我的应用程序受到一些阻碍”是什么意思?如果它与窗口模式有关,那么你应该看看这个***.com/questions/24279382/… 【参考方案1】:

我把它改成

struct BrowsingHistory

    QString dir;
    BrowsingHistory * next;
    BrowsingHistory * prev;
    BrowsingHistory(const QString & path = "") :
        dir(path),
        next(0),
        prev(0)
    
;

BrowsingHistory  *m_history;
BrowsingHistory  *m_historyHead;

在构造函数中我初始化为 ..

m_history = m_historyHead = new BrowsingHistory(/*Your default location*/);

m_historyHead 用于析构函数中的内存释放,因为它总是指向列表的开头(基本上 struct BrowsingHistory 是 LinkedList 实现)

while(m_historyHead)

    BrowsingHistory * temp = m_historyHead;
    m_historyHead = m_historyHead->next;
    delete temp;

m_history : 始终指向当前路径。

点击desktopButton、homeButton、parentButton,我调用了RegisterHistory(),它定义为...

void RegisterHistory(const QString& dirPath)

    if(m_history->dir != dirPath)
    
        if(m_history->next)
        
            m_history->next->dir = dirPath;
            m_history = m_history->next;
            BrowsingHistory * currentHistory = m_history->next;
            while(currentHistory)
            
                BrowsingHistory * temp = currentHistory;
                currentHistory = currentHistory->next;
                delete temp;
            
            m_history->next = 0;
        
        else
        
            BrowsingHistory * currentHistory = new BrowsingHistory(dirPath);
            currentHistory->prev = m_history;
            m_history->next = currentHistory;
            m_history = m_history->next;
        
    

现在这里是下一个和上一个插槽:

void btnNext_Clicked()

    if(m_history && m_history->next)
    
        QString dirPath = m_history->next->dir;
        ui->listFileView->setRootIndex(m_pDirModel->setRootPath(dirPath));
        m_history = m_history->next;
    


void btnBack_Clicked()

    if(m_history && m_history->prev)
    
        QString dirPath = m_history->prev->dir;
        ui->listFileView->setRootIndex(m_pDirModel->setRootPath(dirPath));
        m_history = m_history->prev;
    

【讨论】:

以上是关于如何在自定义文件浏览对话框Qt C++中实现返回和下一步按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义 delphi 组件中实现 stringlist 属性?

如何在自定义 OLE 对象中实现类似 Excel 的 OLE 链接行为

如何在自定义 Spring 存储库中实现自定义方法? [复制]

如何在自定义 UIButton 中实现 .isHighlighted 动画?

如何在自定义相机中实现“捏放大”

在自定义指令 angular 4 中实现 onclick()