Lista w QT creator

0

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 
}
0

Ja może nie stricte w temacie ale powiem Ci tak: do programowania w Qt korzystaj z czystego Qt Creatora. Przenoszenie tego wszystkie z autorskiego IDE, które jest przystosowane do Qt out of box, do Visual Studio nie ma sensu. Oszczędzi Ci to w przyszłości wielu problemów.

0

Problemy niestety już są: nie ma możliwości bezpośredniego generowania jakichkolwiek funkcji/slotów z poziomu qt creatora. I podejrzewam, że gdzieś tutaj leży problem: lista jest skonstruowana, łącznie z widokami, ale te według mnie po prostu te nie są załączone do gui (mimo że czytałem sprawdzałem krok po kroku kod i wszystko wydaje się okej). Problem z samym QT Creatorem jednak jest taki, że zupełnie nie kompiluje mi się z niego nic na Windowsie (mój poprzedni temat).

1 użytkowników online, w tym zalogowanych: 0, gości: 1