Zainstalowałem plugin QT Creatora do Visuala. Sama aplikacja wyświetla plik .txt po otwarciu, następnie tworzy listę ostatnio otwartych plików. W d&d zostało zrobione okienko wyświetlające teskt (textBrowser) oraz menu zawierające możliwość otwarcia ostatniego pliku oraz podmenu z listą ostatnich plików (do niej dodajemy kolejne akcje). Program się kompiluje, wyświetla tekst ostatnio otwartego pliku, odświeża go, ale niestety nie wyświetla listy. Ktoś mógłby zerknąć, w czym może leżeć przyczyna? Prosiłbym o pomoc.
HelloQT::HelloQT(QWidget *parent)
: QMainWindow(parent), maxRecFiles(3)
{
ui.setupUi(this);
//connect(ui.actionOpen, SIGNAL(triggered()), this, SLOT(open()));
createActionsAndConnections();
recFilesMenu();
}
HelloQT::~HelloQT()
{
}
// slots (action)
void HelloQT::open()
{
QString filePath = QFileDialog::getOpenFileName(
this, tr("Open file"), "C://",
tr("Text files(*.txt)"));
if (!filePath.isEmpty())
loadFile(filePath);
}
void HelloQT::openRec() {
QAction *action = qobject_cast<QAction *>(sender());
if (action)
loadFile(action->data().toString());
}
// methods
void HelloQT::createActionsAndConnections()
{
connect(ui.actionOpen, SIGNAL(triggered()), this, SLOT(open())); //
QAction* recentFileAction = 0;
for (int i = 0; i < maxRecFiles; ++i) {
recentFileAction = new QAction(this);
recentFileAction->setVisible(false);
connect(recentFileAction, SIGNAL(triggered()),
this, SLOT(openRec)); // action listenery
recFileActionList.append(recentFileAction); // create actions
}
}
void HelloQT::recFilesMenu() {
for (int i = 0; i < maxRecFiles; ++i)
ui.menuRecently_opened_files->addAction(recFileActionList.at(i)); // tutaj dodajemy
updateRecentActionList();
}
void HelloQT::loadFile(const QString& filePath)
{
QFile file(filePath);
if (!file.open(QFile::ReadOnly)) {
QMessageBox::warning(this, tr("Recent Files Example"),
tr("This file could not be found:\n%1.")
.arg(filePath));
return;
}
QTextStream in(&file);
ui.textBrowser->setText(in.readAll());
adjustForCurrentFile(filePath);
}
void HelloQT::adjustForCurrentFile(const QString &filePath) {
currentFilePath = filePath;
setWindowFilePath(currentFilePath);
QSettings settings;
QStringList recentFilePaths =
settings.value("recentFiles").toStringList();
recentFilePaths.removeAll(filePath);
recentFilePaths.prepend(filePath);
while (recentFilePaths.size() > maxRecFiles)
recentFilePaths.removeLast();
settings.setValue("recentFiles", recentFilePaths);
updateRecentActionList();
}
void HelloQT::updateRecentActionList() {
QSettings settings;
QStringList recentFilePaths =
settings.value("recentFiles").toStringList();
auto toEnd = 0;
if (recentFilePaths.size() <= maxRecFiles)
toEnd = recentFilePaths.size();
else
toEnd = maxRecFiles;
for (int i = 0; i < toEnd; ++i) {
QString strippedName = QFileInfo(recentFilePaths.at(i)).fileName();
recFileActionList.at(i)->setText(strippedName);
recFileActionList.at(i)->setData(recentFilePaths.at(i));
recFileActionList.at(i)->setVisible(true);
}
for (int i = toEnd; i < maxRecFiles; ++i)
recFileActionList.at(i)->setVisible(false); // false
}