Olá pessoal,
Ando ocupado no emprego, mas como desenvolvi alguns programas para facilitar as coisas no trabalho, estou postando dicas que usei nesses programas. Segue mais um abaixo ;-)
A biblioteca do Qt anda muito bem, gosto muito desse framework. Estava lendo algumas notícias relacionadas a desenvolvimento e me deparei com um componente chamado QSettings, na hora me veio a ideia de utiliza-lo, pesquisei na net e descobri algumas pessoas já fazendo uso. Segue abaixo meu código:
Primeiro, o QSettings usa arquivos .ini para guardar informações do formulário e recuperá-los. Por tanto criei uma lista dos ultimos arquivos abertos:
QAction *separatorAct;
enum { MaxRecentFiles = 10 };
QAction *recentFileActs[MaxRecentFiles];
Segundo, criei duas funções para guardar e recuperar essas info do arquivo .ini:
Recuperar:
void MainWindow::updateRecentFileActions()
{
QSettings settings("demosetting.ini", QSettings::IniFormat);
QStringList files = settings.value("recentFileList").toStringList();
//qDebug() << "carregando de settings: " << files;
int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles);
for (int i = 0; i < numRecentFiles; i++) {
QString text = QString("&%1 %2").arg(i).arg(files[i]);
recentFileActs[i]->setText(text);
recentFileActs[i]->setData(files[i]);
recentFileActs[i]->setVisible(true);
}
}
Guardar:
void MainWindow::setCurrentFile(const QString &fileName)
{
//curFile = fileName;
setWindowFilePath(fileName);
QSettings settings("demosetting.ini", QSettings::IniFormat);
QStringList files = settings.value("recentFileList").toStringList();
files.removeAll(fileName);
files.prepend(fileName);
while (files.size() > MaxRecentFiles)
files.removeLast();
settings.setValue("recentFileList", files);
//qDebug() << "salvando em " << settings.fileName() << ": " << files;
}
E o código para adicionar o menu "Recent files":
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// recent files
QMenu *r = this->menuBar()->addMenu("Recent files");
for (int i = 0; i < MaxRecentFiles; i++) {
recentFileActs[i] = new QAction(this);
recentFileActs[i]->setVisible(false);
connect(recentFileActs[i], SIGNAL(triggered()), this, SLOT(openRecentFile()));
}
for (int i = 0; i < MaxRecentFiles; ++i)
r->addAction(recentFileActs[i]);
updateRecentFileActions();
separatorAct = r->addSeparator();
}
void MainWindow::openRecentFile()
{
QAction *action = qobject_cast<QAction *>(sender());
if (action)
loadFile(action->data().toString());
}
Implementem a função loadFile() ou substitua a chamada pela sua função e lembrando que estou usando o Qt versão 5.2 (no Qt Creator 3.1.1).
Espero ter ajudado novamente.
Até a próxima
Abç, Emanuel