控件隐藏,保留布局不变
#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, &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)
{
ui->listWidget->clear();
if(arg1.isEmpty())
{
ui->listWidget->clear();
}
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;
}
QDir dir(scanDir);
QStringList filters;
filters << "*.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;
}
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