界面(可以自己另外美化)
主要控件:一個QGroupBox(ui.groupBox)裏包括一個QLabel(ui.label)和一個QListWidget(ui.listWidgetOpenHistory)
初始界面圖:
打開10個文件後:
當我們添加第11個文件(限制顯示10個最近打開文件):
當我們選擇“6”文件,單擊即打開:
部分.h代碼
#include <QSettings>
//最近打開文件結構體
struct OpenHistory{
int nNumber;
QString strOpenPath;
};
class MyClass: public QWidget
{
Q_OBJECT
public:
MyClass(QWidget *parent = 0);
~MyClass();
void updateHistory(); //刷新最近打開listOpenHistory和最近打開控件
private slots :
void openhistory_click(QListWidgetItem *item); //打開所選最近打開文件
private:
void initOpenHistoryWidget(); //初始化最近打開控件
void updateHistoryWidget(); //刷新最近打開控件
private:
QSettings *settings; //環境目錄下的配置OpenHistory.ini
QList<OpenHistory> listOpenHistory; //保存打開過的最近10個路徑
};
部分.cpp代碼
MyClass::MyClass(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
ui.label->setFrameStyle(QFrame::Box | QFrame::Raised); //[最近打開方案:]樣式
ui.label->setStyleSheet(QLatin1String("background-color:rgb(118, 117, 114);\n"
"color: #fff;"));
//ui.listWidgetOpenHistory->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //隱藏水平滾動條
QObject::connect(ui.listWidgetOpenHistory, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(openhistory_click(QListWidgetItem*)));
//QSettings保存路徑
QString strPath = qApp->applicationDirPath() + "/OpenHistory.ini";
settings = new QSettings(strPath, QSettings::IniFormat);
initOpenHistoryWidget();
}
MyClass::~MyClass()
{
if (settings)
{
delete settings;
settings = NULL;
}
}
void MyClass::initOpenHistoryWidget()
{
int nSize = settings->beginReadArray("OpenHistorys");
for (size_t i = 0; i != nSize; ++i)
{
settings->setArrayIndex(i);
OpenHistory HistoryPath;
HistoryPath.nNumber = settings->value("nNumber").toInt();
HistoryPath.strOpenPath = settings->value("strOpenPath").toString();
QFile file(HistoryPath.strOpenPath);
if (!file.exists())
continue;
listOpenHistory.append(HistoryPath);
}
settings->endArray();
updateHistoryWidget();
}
void MyClass::updateHistoryWidget()
{
ui.listWidgetOpenHistory->clear();
//如果沒有最近打開文件,隱藏Label和Listwidget
if (!listOpenHistory.size())
{
ui.groupBox->hide();
return;
}
else
ui.groupBox->show();
for (size_t i = 0; i != listOpenHistory.size(); ++i)
{
ui.listWidgetOpenHistory->insertItem(i, listOpenHistory[i].strOpenPath);
QListWidgetItem *item = ui.listWidgetOpenHistory->item(i);
if (i % 2 == 0)
item->setBackgroundColor(QColor(239, 250, 225));
else
item->setBackgroundColor(QColor(230, 245, 250));
//item->setToolTip(listOpenHistory[i].strOpenPath);
}
ui.listWidgetOpenHistory->update();
}
void MyClass::updateHistory()
{
//移除原有當前打開的目錄
QString dir = 當前文件;//需另外實現
for (size_t i = 0; i != listOpenHistory.size(); ++i)
{
if (!listOpenHistory[i].strOpenPath.compare(dir))
listOpenHistory.removeAt(i--);
else
{
QFile file(listOpenHistory[i].strOpenPath);
if (!file.exists())
listOpenHistory.removeAt(i--);
}
}
//限制顯示目錄數量爲10
while (listOpenHistory.size() > 9)
listOpenHistory.removeLast();
//更新listOpenHistory
OpenHistory HistoryPath;
HistoryPath.nNumber = 0;
HistoryPath.strOpenPath = dir;
listOpenHistory.push_front(HistoryPath);
settings->beginWriteArray("OpenHistorys");
for (size_t i = 0; i < listOpenHistory.size(); ++i)
{
settings->setArrayIndex(i);
settings->setValue("nNumber", i);
settings->setValue("strOpenPath", listOpenHistory[i].strOpenPath);
}
settings->endArray();
updateHistoryWidget();
}
void MyClass::openhistory_click(QListWidgetItem *item)
{
QString strSelPath = item->text();
//打開文件,需另外實現
。。。
updateHistory();
}
打開所選文件和記錄當前打開文件需自己另外實現。