美文网首页
QFileInfo及QWidget构建复合按钮

QFileInfo及QWidget构建复合按钮

作者: 田陌允 | 来源:发表于2021-10-19 17:51 被阅读0次

// 文件最近一次修改时间
QFileInfo fi(fileName);
qDebug()<<fi.lastModified().toString();

// 除后缀名之外的全部字符串集
fi.completeBaseName()

// 到第一个 . (点) 的字符串集
fi.baseName()

如文件名为 123.1.0.txt,前者结果为:123.1.0
后者结果为:123

完整代码:

///!
//! \brief CStartPage::createRecentDocs 构建右侧的 “最近文件” 列表
//!
void CStartPage::createRecentDocs()
{
    const auto &recentList = m_parent->getRecentFilesList();
    int i = 0;

    ui.CleanRecentButton->setVisible(recentList.size());

    for (const QString &fileName : recentList)
    {
        QWidget *host = new QWidget(this);
        host->setLayout(new QHBoxLayout);

        QFileInfo fi(fileName);
        QToolButton *deleteButton = new QToolButton(host);
        deleteButton->setAutoRaise(true);
        deleteButton->setIcon(QIcon(":/Icons/Delete"));
        deleteButton->setToolTip(tr("Remove this file from the list"));

        QAction *deleteAction = new QAction(fileName, deleteButton);
        deleteAction->setData(i);// 以当前行序号作为Data索引

        connect(deleteButton, &QCommandLinkButton::clicked, deleteAction, &QAction::triggered);
        connect(deleteAction, &QAction::triggered, this, &CStartPage::onRemoveDocument);

        qDebug()<<fi.completeBaseName();
        QCommandLinkButton *fileButton = new QCommandLinkButton(
            fi.completeBaseName(), // fi.baseName() 当文件名带'.'时会导致显示不全问题
            fi.lastModified().toString() + " | " + fileName,
            host
        );

        fileButton->setMinimumHeight(64);

        QAction *recentAction = new QAction(fileName, fileButton);
        recentAction->setData(i);

        connect(fileButton, &QCommandLinkButton::clicked, recentAction, &QAction::triggered);
        connect(recentAction, &QAction::triggered, this, &CStartPage::onRecentDocument);

        host->layout()->addWidget(fileButton);
        host->layout()->addWidget(deleteButton);

        ui.RightWidget->layout()->addWidget(host);
        m_recentFileBtns[i++] = host;
    }


    // spacer 使列表对象“挤”在上方
    QWidget *temp = new QWidget(this);
    temp->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
    ui.RightWidget->layout()->addWidget(temp);
}

以上代码很好的展示了如何构建QWidget及layout,并用纯代码方式搭建同时多个元素的复合按钮对象
最后一段代码通过构建一个新的QWidget去占位,实现类似 Creator设计师 中添加弹簧的效果

相关文章

网友评论

      本文标题:QFileInfo及QWidget构建复合按钮

      本文链接:https://www.haomeiwen.com/subject/zubaoltx.html