📄 filedialog.cpp
字号:
#include "xptext.h"#include "filedialog.h"#include "filebrowser.h"#include "xptools.h"//ezx#include <zapplication.h>#include <zscrollview.h>#include <zmultilineedit.h>#include <ezxutilcst.h>#include <zpushbutton.h>#include <zglobal.h>#include <ezxres.h>#include <zmessagebox.h>//qt#include <qvbox.h>#include <qlabel.h>#include <qfile.h>#include <qdir.h>#include <qpixmap.h>QString ChineseAndEnglish(const char*ChineseString); FileDialog::FileDialog(bool editable,char const *buttontext, bool editmode, QWidget *parent, char const *name, unsigned int flags) : ZMainWidget(editmode, parent, name, flags/*(flags|WType_Modal)*/){ m_editable = editable; in_loop = FALSE; QString current = buttontext; //set own content widget 设置自已的窗口内容 QVBox *cw = new QVBox(this); setContentWidget(cw); //get the content widget 获得窗口内容 QVBox *vb = (QVBox*)getContentWidget(0); setGeometry(0,0,240,320); //--don't create on open mode, we need wider space if (m_editable) { ZScrollView *sv = new ZScrollView(vb); sv->setMinimumSize(QSize(width(), ZGlobal::getLineHeight() * 3)); sv->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); QString txt = ChineseAndEnglish("文件名:"); QLabel *nlb = new QLabel(txt, sv->viewport());//设置凹痕线 int lbw = QFontMetrics(qApp->font()).width(txt) + 3; nlb->setMinimumSize(lbw, ZGlobal::getLineHeight()); sv->addChild(nlb, 0, 0, true); mLineEdit = new ZMultiLineEdit(sv->viewport(), TRUE, 3); mLineEdit->setIndent(lbw); //don't accept line feed, carriage return, ?, /, <, >, \, :, ", and * characters 不能输入回车,换行,等 mLineEdit->setFilter(QRegExp("[^\\n\\r?/<>\\\\:\"*]"), TRUE); sv->addChild(mLineEdit, 0, 0, true); } // mBrowser = new FileBrowser("* *.cfg *.dhm *.ini *.lin *.phm *.sh *.txt *.htm *.html *.xml config installedDB PlugCardDB", vb, "browser"); mBrowser->setDir("/mmc/mmca1"); mBrowser->setFrameShape(QFrame::NoFrame); mBrowser->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); QObject::connect(mBrowser, SIGNAL(isFilePicked(bool)), SLOT(filePicked(bool))); UTIL_CST *cst = new UTIL_CST(this,ChineseAndEnglish("保存")); setCSTWidget(cst); mMiddleBtn = cst->getMidBtn(); mMiddleBtn->setEnabled(FALSE); //mMiddleBtn->setText(buttontext); mMiddleBtn->setText(ChineseAndEnglish(current)); QObject::connect(mMiddleBtn, SIGNAL(clicked()), SLOT(accept())); //-- if (m_editable) QObject::connect(mLineEdit, SIGNAL(textChanged()), SLOT(textChanged())); else QObject::connect(mBrowser, SIGNAL(isFilePicked(bool)), mMiddleBtn, SLOT(setEnabled(bool))); //-- mBackBtn = cst->getRightBtn(); mBackBtn->setResourceID("CST_Back"); QObject::connect(mBackBtn, SIGNAL(clicked()), this, SLOT(reject())); mPopup = new QPopupMenu(cst, NULL); mPopup->insertSeparator(SeparatorItem); mPopup->insertItem(ChineseAndEnglish("系统目录"), SystemItem, SystemItem); mPopup->insertItem(ChineseAndEnglish("电话目录"), PhoneItem, PhoneItem); mPopup->insertItem(ChineseAndEnglish("SD卡目录"), SDMMCItem, SDMMCItem); mPopup->insertItem(ChineseAndEnglish("设置目录"), SetupItem, SetupItem); mPopup->insertSeparator(SeparatorItem2); mPopup->setItemEnabled(DeleteItem, FALSE); QObject::connect(mPopup, SIGNAL(activated(int)), SLOT(selectMenu(int))); vb->resize(240,288); mBackBtn = cst->getLeftBtn(); mBackBtn->setPopup(mPopup);}FileDialog::~FileDialog(){ }int FileDialog::exec(){ setResult(0); show(); if (!in_loop) { in_loop = TRUE; qApp->enter_loop(); } return result();}void FileDialog::done( int r ){ //hide(); if (in_loop) { in_loop = FALSE; qApp->exit_loop(); } setResult(r);}void FileDialog::accept(){ done(Accepted); }void FileDialog::reject(){ done(Rejected);}void FileDialog::closeEvent(QCloseEvent *e){ e->accept(); reject();}void FileDialog::selectMenu(int idx){ if (idx == PhoneItem) { mBrowser->setDir("/ezxlocal/download/mystuff"); } else if (idx == SystemItem) { mBrowser->setDir("/ezxlocal"); } else if (idx == SDMMCItem) { mBrowser->setDir("/mmc/mmca1"); } else if (idx == SetupItem) { mBrowser->setDir("/ezxlocal/download/appwrite/setup"); }}void FileDialog::filePicked(bool b){ if (m_editable) { if (b) mLineEdit->setText(mBrowser->currentText()); else mLineEdit->setText(""); } mPopup->setItemEnabled(DeleteItem, b);}void FileDialog::textChanged(){ if (m_editable) //not needed, only to prevent bad coding mMiddleBtn->setEnabled(!mLineEdit->text().isEmpty());}void FileDialog::setDir(const QString &path){ mBrowser->setDir(path);}QString FileDialog::getFileName() { if (m_editable) return (mBrowser->getFilePath() + "/" + mLineEdit->text().simplifyWhiteSpace()); else return mBrowser->getFileName();}QString FileDialog::getFilePath(){ return mBrowser->getFilePath();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -