Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: arku от Октябрь 04, 2010, 21:49



Название: QFileDialog+QFile
Отправлено: 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();
но при этом окно вызовется сразу после компиляции. как это повесить на кнопку?


Название: Re: QFileDialog+QFile
Отправлено: Авварон от Октябрь 04, 2010, 22:10
Сделать слот в классе окна.


Название: Re: QFileDialog+QFile
Отправлено: noirhor от Октябрь 04, 2010, 22:12
Создайте слот, в нем:
Код:
QFileDialog::getOpenFileName();
и коннектитесь к нему:
Код:
QObject::connect(openfile,SIGNAL(triggered()),SLOT(your_slot()))


Название: Re: QFileDialog+QFile
Отправлено: Hellraiser от Октябрь 04, 2010, 22:13
Смотреть реализацию слота MainWindow::open() в примере %QTDIR%\examples\mainwindows\application


Название: Re: QFileDialog+QFile
Отправлено: arku от Октябрь 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);




}


Название: Re: QFileDialog+QFile
Отправлено: crossly от Октябрь 13, 2010, 18:56
тот кто мало мальски разобрался с с++ на такие грабли не наступает... и еще... класс можно и в main.cpp описать .... но это не есть хорошая практика ...