QT开发中文网

Qt 实现一个动态显示目录路径的自定义控件

您好,可以使用QHBoxLayout和QLabel来实现一个动态显示目录路径的自定义控件。下面是一个简单的示例代码:

#include <QtWidgets>

class PathWidget : public QWidget
{
public:
    PathWidget(QWidget *parent = nullptr) : QWidget(parent)
    {
        QHBoxLayout *layout = new QHBoxLayout(this);
        layout->setContentsMargins(0, 0, 0, 0);

        // 创建标签,并设置样式和初始文本
        m_label = new QLabel(this);
        m_label->setTextInteractionFlags(Qt::TextSelectableByMouse);
        m_label->setStyleSheet("color: gray; font-size: 12px;");
        m_label->setText("/");

        // 将标签添加到布局中
        layout->addWidget(m_label);
    }

    // 设置当前目录路径
    void setPath(const QString &path)
    {
        QStringList parts = path.split(QDir::separator());

        if (parts.isEmpty()) {
            return;
        }

        QString newPath;

       for (const QString &part : parts) {
           newPath += QDir::separator() + part;
           addBreadcrumb(part, newPath);
       }

       setCurrent(part);
   }

private:
    // 添加面包屑标签
   void addBreadcrumb(const QString &name, const QString &path)
   {
       QLabel *label = new QLabel(this);

       label->setText(QString("<a href=\"%1\">%2</a>").arg(path).arg(name));
       label->setStyleSheet("color: blue; font-size: 12px;");
       label->setOpenExternalLinks(false);

       connect(label, &QLabel::linkActivated, this, [this](const QString &link){
           setCurrent(link.split(QDir::separator()).last());
       });

      m_breadcrumbs.append(label);
      layout()->addWidget(label);
   }

   // 设置当前目录标签
   void setCurrent(const QString &name)
   {
       for (QLabel *label : m_breadcrumbs) {
           if (label->text().contains(name)) {
               label->setStyleSheet("color: gray; font-size: 12px;");
           } else {
               label->setStyleSheet("color: blue; font-size: 12px;");
           }
       }

       m_label->setText(QString("<a href=\"%1\">%2</a>").arg(QDir::toNativeSeparators(name)).arg(name));
   }

private:
    QLabel *m_label;
    QList<QLabel*> m_breadcrumbs;
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建窗口和布局
    QWidget window;
    QVBoxLayout layout(&window);
    
    // 创建自定义控件并设置路径
    PathWidget pathWidget;
    pathWidget.setPath("/Users/Username/Documents");

    // 将自定义控件添加到布局中并显示窗口
    layout.addWidget(&pathWidget);
    window.show();

   return app.exec();
}

通过以上代码,您将看到一个包含动态显示目录路径的自定义控件的窗口。当用户点击面包屑标签时,当前目录将更新为该标签所代表的目录。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1433

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?