в консоле получалась функция, а тут не знаю как.
mainwindow.h
добавил
private:
void mFile(QString file);
void MainWindow::mFile(QString file) //моя функция
{
}
void MainWindow::on_pushButton_clicked() //выбор файла
{
QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
mFile(str); //передал значение в функцию
}
void MainWindow::on_pushButton_2_clicked() //вывод свойства файла
{
QFileInfo info(mFile());
ui->label_2->setText("Имя файла: " +info.fileName());
}
Слушай ты бы хоть, какой нибудь учебник по С++ почитал.
Если тебе надо передать имя файла, его сохраняй и потом используй.
private:
QString fileName
Вот здесь QFileInfo info(mFile());
Во первых функция mFile(QString file) не возвращает ничего void. Зачем тогда она здесь?
И во вторых у этой функции есть обязательный параметр.
Читать и учить.
разобрался с функциями
void MainWindow::on_action_1_triggered()
{
mFile = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
if(!mFile.isEmpty())
{
ui->statusBar->showMessage("Выбран файл",1500);
ui->svoistvaButton->setEnabled(true);
}
else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
return;
}
void MainWindow::on_svoistvaButton_clicked()
{
QFileInfo info(mFile);
ui->label->setText("Имя файла: " + info.fileName());
ui->label_2->setText("Размер файла: " + QString::number(info.size()/1024) + " Кб");
ui->label_3->setText("Дата изменения: " + info.lastModified().toString());
}
void MainWindow::on_pushButton_2_clicked()
{
QFile oFile(mFile);
if(!oFile.open(QFile::ReadOnly | QFile::Text))
{
QMessageBox::information(this, "Ошибка", "Ошибка открытия для чтения");
return;
}
QTextStream stream(&oFile);
QString buffer = stream.readAll();
ui->textEdit->setText(buffer);
}
void MainWindow::on_pushButton_3_clicked()
{
QFile cFile(mFile);
cFile.close();
}
void MainWindow::on_pushButton_clicked()
{
QFile iFile(mFile);
if (iFile.open(QFile::isOpen())==true)
{
ui->statusBar->showMessage("Файл открыт",1500);
}
else ui->statusBar->showMessage("Файл закрыт",1500);
}
void MainWindow::on_action_2_triggered()
{
close();
}
QFile iFile(mFile);
if (iFile.isOpen()== true)
Данная конструкция всегда будет возвращать false т.к. вы поверяете открытость не mFile, а открытость объекта iFile, для которого функция open не вызывалась. iFile, cFile и oFile - это совершенно разные переменные, между собой никак не связанные.void MainWindow::on_pushButton_3_clicked()
{
QFile cFile(mFile);
cFile.close();
}
Данная конструкция вообще лишена смысла т.к. вы пытаетесь закрыть еще не открытый файл. Поймите, Вы работаете не с файлом mFile (это всего лишь путь к файлу, а не его handle), а с локальным объектом QFile, который создаете на стеке и который будет уничтожен при выходе из функции, например здесь:void MainWindow::on_pushButton_2_clicked()
{
QFile oFile(mFile);
if(!oFile.open(QFile::ReadOnly | QFile::Text))
{
QMessageBox::information(this, "Ошибка", "Ошибка открытия для чтения");
return;
}
QTextStream stream(&oFile);
QString buffer = stream.readAll();
ui->textEdit->setText(buffer);
} //<- вот здесь объект oFile будет уничтожен, и закрытие файла произойдет автоматически.
QFile _file;
void MainWindow::on_action_1_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
if(!fileName.isEmpty())
{
ui->statusBar->showMessage("Выбран файл",1500);
ui->svoistvaButton->setEnabled(true);
_file.setFileName(fileName);
}
else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
return;
}
void MainWindow::on_svoistvaButton_clicked()
{
QFileInfo info(_file);
ui->label->setText("Имя файла: " + info.fileName());
ui->label_2->setText("Размер файла: " + QString::number(info.size()/1024) + " Кб");
ui->label_3->setText("Дата изменения: " + info.lastModified().toString());
}
void MainWindow::on_pushButton_2_clicked()
{
if(!_file.isOpen() && !_file.open(QFile::ReadOnly | QFile::Text))
{
QMessageBox::information(this, "Ошибка", "Ошибка открытия для чтения");
return;
}
QTextStream stream(&_file);
QString buffer = stream.readAll();
ui->textEdit->setText(buffer);
}
void MainWindow::on_pushButton_3_clicked()
{
_file.close();
}
void MainWindow::on_pushButton_clicked()
{
if (_file.isOpen())
ui->statusBar->showMessage("Файл открыт",1500);
else
ui->statusBar->showMessage("Файл закрыт",1500);
}
Aleksei, Вам нужно прекращать обезьяничать с визуальным дизайнером. В частности с автоматическим созданием слотов.
Что делает эта функция :
void MainWindow::on_pushButton_3_clicked()
А эта?
void MainWindow::on_pushButton_500_clicked()
Функции и переменные должны в своём названии отражать суть, никаких pushButton_3 быть не может.
Привыкайте сразу писать код для людей, а не для компилятора.
Представьте себя в лифте, в котором кнопки обозваны, как у вас, например вместо кнопок Стоп и Вызов - pushButton_18 и pushButton_43
спасибо учту.
Такой вопрос: если с текстовым файлом постоянно работает система и ей нельзя мешать (допустим лог файл) в этом текст. файле нужно искать запись (допустим Error 100) файл довольно большой. Как лучше реализовать? Прямиком по файлу запустить поиск или через буфер или копию файла сделать, запустить поиск и потом его удалить? что меньше нагрузит систему и не помещает системе писать в этот файл?
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)