【无标题】控件隐藏,布局不变,导致上下移动

控件隐藏,保留布局不变

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDir>
#include<QDebug>
#include<QFileInfo>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    scanDir="C:/Users/luhailin/Desktop/code/";


    ui->lineEdit_GoldenScanDir->installEventFilter(this);

    //    connect(ui->lineEdit_GoldenScanDir,&MyLineEdit::signal_lostCursor,
    //            [this]()
    //    {
    //           ui->listWidget->hide();
    //    }
    //    );

    //    connect(ui->lineEdit_GoldenScanDir,&MyLineEdit::signal_obtainedCursor,
    //            [this]()
    //    {
    //           ui->listWidget->show();
    //    }
    //    );
    connect(ui->lineEdit_GoldenScanDir, &QLineEdit::cursorPositionChanged,
            [this]()
    {
        if(ui->lineEdit_GoldenScanDir->text().isEmpty())
        {
            ui->listWidget->clear();
        }
    }
    );

}

MainWindow::~MainWindow()
{
    delete ui;
}
bool MainWindow::eventFilter(QObject * obj, QEvent *  event)
{
    if (obj == ui->lineEdit_GoldenScanDir) {		// 判断过滤对象

        // 鼠标按下事件的处理
        if (event->type() == QEvent::FocusOut)
        {
            ui->listWidget->hide();

            QSizePolicy sp_retain = ui->listWidget->sizePolicy();
            sp_retain.setRetainSizeWhenHidden(true);
            ui->listWidget->setSizePolicy(sp_retain);

        }

        if (event->type() == QEvent::FocusIn)
        {
            ui->listWidget->show();
        }
        if (event->type() == QEvent::FocusAboutToChange)
        {

        }

    }


    return QMainWindow::eventFilter(obj, event);


}


void MainWindow::on_lineEdit_GoldenScanDir_textChanged(const QString &arg1)
{


    /// /code/ASM_EXAMPLE.vtk
    ui->listWidget->clear();

    if(arg1.isEmpty())
    {
        ui->listWidget->clear();
    }


    ///1. 全路径信息
    QString  path=arg1;
    QString strpath=QDir::fromNativeSeparators(path);
    if(!strpath.endsWith(".vtk"))
    {
        strpath+=".vtk";
    }
    QFileInfo info(strpath);
    if(info.exists())
    {
        ui->listWidget->addItem(info.absoluteFilePath());
        return;
    }

    2. 关键字
    QDir dir(scanDir);
    QStringList filters;
    filters << "*.vtk"; // 只检查 .vtk
    dir.setNameFilters(filters);
    dir.setSorting(QDir::Name | QDir::IgnoreCase);
    QString keyword = arg1; // 要查找的关键字
    QStringList files = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
    foreach(QString file, files)
    {
        QString filePath = dir.filePath(file);
        QFileInfo  info(filePath);
        if(info.baseName().contains(keyword, Qt::CaseInsensitive))
        {
            ui->listWidget->addItem( filePath);
        }
    }

    if(ui->listWidget->count()>0)
    {
        return;
    }

    3. 相对路径  /code/ASM_EXAMPLE.vtk
    QString dirPath = scanDir; // 指定目录
    QStringList list=     strpath.split("/");
    QStringList scanList=scanDir.split("/");

    QStringList newList;
    foreach(QString t,list)
    {
        if(!t.isEmpty())
        {
            newList<<t;
        }

    }
    QStringList newListscan;
    foreach(QString t,scanList)
    {
        if(!t.isEmpty())
        {
            newListscan<<t;
        }

    }

    newListscan.push_back(newList[newList.size()-1]);
    int n=newListscan.size();
    int m=newList.size();
    for(int i=0;i<newList.size();i++)
    {
        n--;
        m--;
        if(newList[m]!=newListscan[n])
        {
            return;
        }
    }
    QString pth="";
    for(int i=0;i<newListscan.size()-newList.size();i++)
    {
        pth+=newListscan[i]+"/";
    }
    for(int i=0;i<newList.size();i++)
    {
        if(i==newList.size()-1)
        {
            pth+=newList[i];
        }
        else {
            pth+=newList[i]+"/";
        }
    }

    QFileInfo info1(pth);
    if(info1.exists())
    {

        ui->listWidget->addItem(info1.absoluteFilePath());
        return;
    }





}

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QThread>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    bool eventFilter(QObject *, QEvent *) override;


private slots:
    void on_lineEdit_GoldenScanDir_textChanged(const QString &arg1);

private:
    Ui::MainWindow *ui;
    QString  scanDir;

};

#endif // MAINWINDOW_H

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值