Russian Qt Forum
Ноябрь 25, 2024, 10:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QFileDialog+QFile  (Прочитано 3974 раз)
arku
Гость
« : Октябрь 04, 2010, 21:49 »

Доброго времени суток.. начал изучать qt, все шло хорошо пока не столкнулся с такой проблемой:

Есть меню(QAction) openfile. Создаю диалог и подключаю его к кнопке:

Код:
QFileDialog *choosefile = new QFileDialog();
QObject::connect(openfile,SIGNAL(triggered()),choosefile,SLOT(show()))
таким образом у меня выбирается файл, но я не знаю как его дальше обработать. По
идее должно быть что то вроде
Код:
QFile Myfile(choosefile->FileName); 
но это выдает кирпичи.


Можно сделать вот так, или даже вот так:
Код:
QFileDialog::getOpenFileName();
QString fn = QFileDialog::getOpenFileName();
но при этом окно вызовется сразу после компиляции. как это повесить на кнопку?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Октябрь 04, 2010, 22:10 »

Сделать слот в классе окна.
Записан
noirhor
Гость
« Ответ #2 : Октябрь 04, 2010, 22:12 »

Создайте слот, в нем:
Код:
QFileDialog::getOpenFileName();
и коннектитесь к нему:
Код:
QObject::connect(openfile,SIGNAL(triggered()),SLOT(your_slot()))
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #3 : Октябрь 04, 2010, 22:13 »

Смотреть реализацию слота MainWindow::open() в примере %QTDIR%\examples\mainwindows\application
Записан
arku
Гость
« Ответ #4 : Октябрь 13, 2010, 18:21 »

Смотреть реализацию слота MainWindow::open() в примере %QTDIR%\examples\mainwindows\application
К сожалению с тем подходом что был у меня это очень медленно помогало). Моя ошибка была в том что у меня была создана функция main() и в ней все что было. Класса MainWindow у меня не было, из за этого было непонятно как создавать слот.

Дабы более никто не наступал на грабли пишу решение:

Изначально создаем слот:
Код:
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
       MainWindow();
  [b] private slots:

       void fileopen();[/b] //это для слота

private:
//это надо для функции открытия файла.
       void loadfile(const QString&);

      QPlainTextEdit *maintext;

};
Затем создаем функцию которая принимает имя файла в качестве аргумента из функции ниже, открывает файл и кладет в текстовое поле его содержмое.
Код:
void MainWindow::loadfile(const QString &filename)
{
    QFile file(filename);
    file.open(QFile::ReadOnly | QFile::Text);
    QTextStream in(&file);
    maintext->setPlainText(in.readAll());
    

}
Здесь создаем функцию которая выбирает файл
Код:
void MainWindow::fileopen(){

QString filename =      QFileDialog::getOpenFileName(this, "Open file");
loadfile(filename);




}
Записан
crossly
Гость
« Ответ #5 : Октябрь 13, 2010, 18:56 »

тот кто мало мальски разобрался с с++ на такие грабли не наступает... и еще... класс можно и в main.cpp описать .... но это не есть хорошая практика ...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.266 секунд. Запросов: 23.