Название: QFileDialog если файл не выбран[РЕШЕНО] Отправлено: Zeka13 от Март 11, 2012, 11:31 Заранее спасибо за внимание!
Никак не могу разобраться, как полностью закрыть окно, если в созданном в нём диалоге выбора файла, файл окажется не выбран! Смог только вот что родить: Код: QString str = QFileDialog::getOpenFileName(0, "Open Dialog", "", "*.plot"); Название: Re: QFileDialog если файл не выбран Отправлено: kambala от Март 11, 2012, 12:59 Код
Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 11, 2012, 13:24 close(); точно не работает почему-то
qApp чем является? Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 11, 2012, 13:46 close(); точно не работает почему-то qApp чем является? qApp - объект QAppliaction. В этом случае его использовать не стоит, qApp->quit() грохнет приложение Чтобы закрыть диалог, можно вызвать reject(), будет равносильно нажатию пользователем кнопки Отмена Или же accept(), тогда результатом работы диалога будет Accepted Или done(int), в который любой код можно положить Название: Re: QFileDialog если файл не выбран Отправлено: GreatSnake от Март 11, 2012, 13:50 Zeka13:
а как ты можешь вообще не выбрать файл и выйти из QFileDialog::getOpenFileName() ??? kambala, sudo: ТС использует статический метод и не имеет указателя на диалог. Про какой close() и reject() может идти речь ??? Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 11, 2012, 14:08 kambala, sudo: ТС использует статический метод и не имеет указателя на диалог. Про какой close() и reject() может идти речь ??? Я так понял, у него открыт диалог, поверх которого открывается QFileDialog. Вот тот самый диалог и надо грохнуть Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 11, 2012, 14:18 Цитировать а как ты можешь вообще не выбрать файл и выйти из QFileDialog::getOpenFileName() нажать отмена я могу в диалоге выбора файла. Мне нужно закрыть форму, из которой я вызвал диалог! Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 11, 2012, 14:20 нажать отмена я могу в диалоге выбора файла. Мне нужно закрыть форму, из которой я вызвал диалог! Форма в каком виде? Это диалог, отдельно висящий виджет, MainWindow, виджет с родителем? Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 11, 2012, 14:35 QMainWindow
Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 11, 2012, 14:36 QMainWindow Т.е если я правильно понимаю, если не выбран файл, нужно грохнуть приложение? Тогда qApp->quit() Название: Re: QFileDialog если файл не выбран Отправлено: GreatSnake от Март 11, 2012, 14:44 Мне нужно закрыть форму, из которой я вызвал диалог! Причём здесь тогда вообще QFileDialog ???Постановка вопроса просто убийственная. Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 11, 2012, 14:54 Ы. А close() будет работать, если добавить вот такую строчку в main
Код
где app - объект QApplication. Если, конечно, не будут открыты другие окна приложения в этот момент Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 11, 2012, 16:35 Ещё раз
есть главное окно(A), из него открыть можно другое окно(B), в это другом окне(B) создаётся диалог выбора файла и если файл не выбран, то должно закрыться окно B Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 11, 2012, 17:11 Тогда на второй круг идём :D
Если диалог, то accept/reject, если виджет, то close должен работать Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 11, 2012, 17:30 ../plot2.8/plot.cpp:50:16: ошибка: нет декларации «accept» в этой области видимости
Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 11, 2012, 17:40 Значит, всё-таки не диалог, а виджет. Вообще, мы тут можем долго гадать, поэтому в идеале посмотреть бы код хедера и реализации (не целиком, только то, что относится к делу)
Название: Re: QFileDialog если файл не выбран Отправлено: kambala от Март 11, 2012, 17:42 от кого наследуется окно В?
Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 11, 2012, 17:58 Цитировать Значит, всё-таки не диалог, а виджет. Вообще, мы тут можем долго гадать, поэтому в идеале посмотреть бы код хедера и реализации (не целиком, только то, что относится к делу) я же написал, что это QMainWindow Цитировать от кого наследуется окно В? меня так научили делать, в окне A кнопка, к ней слот void showPlot(); окноA.cpp void MainWindow::showPlot() { Plot *bufka2 = new Plot; bufka2->show(); } окно B.cpp Код: Plot::Plot(QWidget *parent) : Код: void MainWindow::drawPlot() Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 11, 2012, 18:08 я же написал, что это QMainWindow Забыл. В приложении не должно быть двух QMainWindow. Оно на то и главное окно, чтобы быть в одном экземпляре. Более чем уверен, что его безболезненно можно заменить на QDialog, раз оно поверх главного окна, и закрывать acceptом/rejectом, либо на QWidget без родителя Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 11, 2012, 18:48 окей, я перепишу на QWidget, что мне тогда нужно будет сделать?
Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 11, 2012, 18:56 Поменять форму в дизайнере и закрывать методом close()
Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 11, 2012, 21:12 Код: Поменять форму в дизайнере я переделал на QWidget, close(); не работает Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 12, 2012, 10:10 Если не работает, значит что-то ещё не так
Название: Re: QFileDialog если файл не выбран Отправлено: _OLEGator_ от Март 12, 2012, 10:36 не может close() не работать. Почему он в коде закомментирован? Полный код тогда давайте.
Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 12, 2012, 18:07 разумеется я раскоментировал!
Так а какой ещё код нужен, всё же выше написано! Название: Re: QFileDialog если файл не выбран Отправлено: Alex Custov от Март 12, 2012, 18:19 Код: Plot::Plot(QWidget *parent) : Код
Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 12, 2012, 18:25 спасибо за ответ, но ещё не попробовал ваше реализацию!
А в конструкторе нельзя закрыть окно никак? Может я как-то не правильно создаю новые окно? У меня например если закрывается главное окно, то побочные нормально сами по себе живут Название: Re: QFileDialog если файл не выбран Отправлено: kambala от Март 12, 2012, 18:37 если хочется закрыть окно в конструкторе, то это не очень хороший подход - лучше вынести условие, отвечающее за появление окна, в класс родителя (т.е. окна-предка).
если "побочным" не указать родителя, то они будут жить сами по себе. Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 12, 2012, 18:38 Во я слепой :D
Так а чего мы в конструкторе закрывать-то будем? Окно ж ещё не показано. Я так понимаю, вызывающий код такой: Код
Тогда можно так Код
Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 12, 2012, 19:59 спасибо за ответы, буду разбираться!
Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 12, 2012, 22:25 Alex Custov, Вас я совсем не понял
kambala, спасибо, но у меня так и сделано, закрыть то в итоге как? sudo, если так, как вы подсказали, реализовывать, то я не понимаю как передать str, ведь так оно задастся в классе MainWindow, а мне str нужна будет в классе Plot, а множественное наследование в Qt как я понял не реализуемо вот так Код: #ifndef PLOT_H Название: Re: QFileDialog если файл не выбран Отправлено: V1KT0P от Март 12, 2012, 22:30 спасибо за ответы, буду разбираться! Минимально неработающий код в студию! А то этот тред похож на общение начинающих телепатов ;D.Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 12, 2012, 22:46 так а чем вам мой пост выше не нравится?
Название: Re: QFileDialog если файл не выбран Отправлено: kambala от Март 12, 2012, 22:54 kambala, спасибо, но у меня так и сделано, закрыть то в итоге как? если так и сделано (выбирать файл в слоте родителя, и если файл выбран, то создавать диалог), то зачем тогда пытаться закрыть окно в конструкторе?Название: Re: QFileDialog если файл не выбран Отправлено: V1KT0P от Март 12, 2012, 22:57 так а чем вам мой пост выше не нравится? Ну смотри, вот это:Код: public QWidget, public MainWindow Мне например проще скачать код запустить, убедиться что он не работает и затем сразу поправить и проверить. Название: Re: QFileDialog если файл не выбран Отправлено: V1KT0P от Март 12, 2012, 23:11 Ещё раз Ты вот это хотел? http://rghost.ru/36992424 (http://rghost.ru/36992424)есть главное окно(A), из него открыть можно другое окно(B), в это другом окне(B) создаётся диалог выбора файла и если файл не выбран, то должно закрыться окно B Название: Re: QFileDialog если файл не выбран Отправлено: Bepec от Март 13, 2012, 07:07 Жесть :D привнесу нотку своего оффтопа - помоему вместо "отправить читать учебники и учиться" консилиум тут решает проблему методом "напишем за него, а там видно будет" :)
Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 13, 2012, 08:06 V1KT0P, так оно так, но у вас только одна форма в дизайнере, а у меня две!
Про наследование я понял, что так нельзя, только как я тогда str передам? Цитировать sudo, если так, как вы подсказали, реализовывать, то я не понимаю как передать str, ведь так оно задастся в классе MainWindow, а мне str нужна будет в классе Plot, а множественное Bepec, я читаю, просто в этом случае не смог разобраться Название: Re: QFileDialog если файл не выбран Отправлено: Bepec от Март 13, 2012, 09:41 Блин ёмое. Нужна тебе эта str - так вообще передавай её прямым вызовом функции, сигналом, в конструкторе её инициализируй чоле :)
Или указатель/ссылку на него передавай. Проблема выеденного яйца не стоит ёмоё. Название: Re: QFileDialog если файл не выбран Отправлено: V1KT0P от Март 13, 2012, 09:42 V1KT0P, так оно так, но у вас только одна форма в дизайнере, а у меня две! Вот поэтому я и говорю что нужно выложить минимальный нерабочий вариант, ибо одно и то-же можно сделать многими способами.Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 13, 2012, 10:54 Вариантов вагон и маленькая тележка
Можно вот так: Код
Можно так: Код
Можно сигнал послать, только зачем, или ещё чего придумать Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 13, 2012, 14:40 оформил так
Код: void MainWindow::showPlot() Код: void MainWindow::drawPlot() Код: void Plot::setFileName(QString strCheck) Код: #ifndef PLOT_H Скомпилилось, но теперь при нажатии на кнопку, после которой предлагалось выбрать файл програ падает Цитировать QFSFileEngine::open: No file name specified Название: Re: QFileDialog если файл не выбран Отправлено: mutineer от Март 13, 2012, 14:43 Код ты уверен, что закрывать надо именно при непустой строке? Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 13, 2012, 14:50 закрыть надо при пустой, разве не так проверить на пустоту?
а вообще даже если так написать, всё равно даже выбор файла не появится Код: void MainWindow::drawPlot() Название: Re: QFileDialog если файл не выбран Отправлено: QuAzI от Март 13, 2012, 14:52 Zeka13, вообще в идеале когда просят код и это не закрытая разработка, выложить архив с проектом, чтобы его мог народ нормально его видеть ВЕСЬ, скомпилить и запустить и оно переделывается и решается за 2 минуты.
По части вашего кода... это вообще маразм показывать форму чтобы её закрыть. По моему это свободно решается так: Код: void MainWindow::drawPlot() Название: Re: QFileDialog если файл не выбран Отправлено: mutineer от Март 13, 2012, 14:52 закрыть надо при пустой, разве не так проверить на пустоту? а вообще даже если так написать, всё равно даже выбор файла не появится Код: void MainWindow::drawPlot() Код попробуй так strCheck.isEmpty() == true если строка пустая !strCheck.isEmpty() == true если строка не пустая Название: Re: QFileDialog если файл не выбран Отправлено: QuAzI от Март 13, 2012, 14:55 всё равно даже выбор файла не появится Должен или матюкнуться или событие drawPlot не наступает. Это вообще откуда?Название: Re: QFileDialog если файл не выбран Отправлено: kambala от Март 13, 2012, 14:56 почему так сложно создать объект Plot только если файл был выбран?
Код
а в методе showPlot() - утечка памяти Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 13, 2012, 15:04 QuAzI, так тоже не работает с той же ошибкой
mutineer, я же сказал, что никак не работает Название: Re: QFileDialog если файл не выбран Отправлено: mutineer от Март 13, 2012, 15:05 QuAzI, так тоже не работает с той же ошибкой mutineer, я же сказал, что никак не работает QString() вместо "" ставить в третий параметр пробовал? Или читать предпочитаешь выборочно? Название: Re: QFileDialog если файл не выбран Отправлено: kambala от Март 13, 2012, 15:14 QuAzI, так тоже не работает с той же ошибкой у тебя наверное в MainWindow кнопка не к тому слоту привязана - должна быть к drawPlot()mutineer, я же сказал, что никак не работает QuAzI, так тоже не работает с той же ошибкой mutineer, я же сказал, что никак не работает QString() вместо "" ставить в третий параметр пробовал? Или читать предпочитаешь выборочно? Название: Re: QFileDialog если файл не выбран Отправлено: mutineer от Март 13, 2012, 15:16 Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 13, 2012, 15:18 ничего не изменилось ...
Название: Re: QFileDialog если файл не выбран Отправлено: QuAzI от Март 13, 2012, 15:21 Тогда так, при условии что QFileDialog, QDir и QString объявлены в инклюдах
Код: void MainWindow::drawPlot() Название: Re: QFileDialog если файл не выбран Отправлено: Bepec от Март 13, 2012, 15:25 Ребят. Я думаю вы хней маетесь... Уже второй такой человек на форуме - даёт некорректную задачу с некорректным решением.
И вместо того чтобы человека направить на правильное использование - все начинают решать его некорректную задачу. И корёжить без того странный разум автора... Название: Re: QFileDialog если файл не выбран Отправлено: kambala от Март 13, 2012, 15:46 у строки - да, а диалогу выбора файла всё равно
Ребят. Я думаю вы хней маетесь... Уже второй такой человек на форуме - даёт некорректную задачу с некорректным решением. задача корректна и ясна, а ТС просто ответы читать не умеетИ вместо того чтобы человека направить на правильное использование - все начинают решать его некорректную задачу. И корёжить без того странный разум автора... Название: Re: QFileDialog если файл не выбран Отправлено: Bepec от Март 13, 2012, 15:48 Таки зачем писать, если автор неадекватен?
Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 13, 2012, 16:04 И вместо того чтобы человека направить на правильное использование - все начинают решать его некорректную задачу. И корёжить без того странный разум автора... Главное - себе не корёжить :D Я обычно на такие вопросы спинным мозгом отвечаю :D Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 13, 2012, 16:07 вот исходники, нужна библиотека qwt 6 для сборки
в репах есть libqwt-dev Название: Re: QFileDialog если файл не выбран Отправлено: V1KT0P от Март 13, 2012, 16:14 вот исходники, нужна библиотека qwt 6 для сборки Дык тебя попросили выложить минимальный рабочий пример. Это значит что надо скопировать проект и обрезать все что не касается ошибки. Отобразить два окна и одно диалоговое окно можно и без библиотеки qwt 6.в репах есть libqwt-dev Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 13, 2012, 16:26 не быстрее будет сделать
sudo apt-get install libqwt-dev -y или мне всё же делать минимальный рабочий пример? Название: Re: QFileDialog если файл не выбран Отправлено: V1KT0P от Март 13, 2012, 16:31 не быстрее будет сделать Ну я например сижу щас на винде. То-есть те кто сидит на винде и лень устанавливать либу просто не захотят тебе помогать.sudo apt-get install libqwt-dev -y или мне всё же делать минимальный рабочий пример? Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 13, 2012, 16:40 вот минимальные исходники
Название: Re: QFileDialog если файл не выбран Отправлено: V1KT0P от Март 13, 2012, 16:51 вот минимальные исходники Все равно пришлось дочищивать от библиотеки =). Вот как я вижу решение проблемы: http://rghost.ru/37001630 (http://rghost.ru/37001630).Название: Re: QFileDialog если файл не выбран Отправлено: QuAzI от Март 13, 2012, 16:59 Ну вот, я тоже пока почистил, и уже опаньки
http://rghost.ru/37001790 P.s. прикольный хостинг, спасибо, надо бы не забыть адрес Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 14, 2012, 12:02 QFSFileEngine::open: No file name specified
Название: Re: QFileDialog если файл не выбран Отправлено: V1KT0P от Март 14, 2012, 12:06 QFSFileEngine::open: No file name specified Ну дык добавь еще и проверку на существование файла.Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 14, 2012, 12:11 Это как? Я же выбираю файл, который существует!
вот пожалуйста, компилится без либ, в выбранный файл должно быть записано слово, оно не записывается! Название: Re: QFileDialog если файл не выбран Отправлено: sudo от Март 14, 2012, 12:23 Откуда ж ему взяться. Строка в конструкторе записывается, а устанавливается только потом
Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 14, 2012, 12:28 так и что вы предлагается сделать?
Название: Re: QFileDialog если файл не выбран Отправлено: Alex Custov от Март 14, 2012, 12:40 вот пожалуйста, компилится без либ, в выбранный файл должно быть записано слово, оно не записывается! ты похоже основ С++ не знаешь. Нужно подучить, иначе ничего хорошего из этого не выйдет, как и получается тут - уже пять страниц обсуждения ни о чём. Взять этот же код: Код
Ты сперва создаёшь объект Plot, внутри конструктора которого сразу же записываешь файл: Код
И только потом устанавливаешь собственно имя файла через setFileName(fname), куда что-то писать. Естественно, что в файл ничего не запишется. Название: Re: QFileDialog если файл не выбран Отправлено: V1KT0P от Март 14, 2012, 13:00 так и что вы предлагается сделать? Так я же тебе пример сделал как через конструктор передать строку, именно так как ты хотел. При чем я первый выложил, а ты взял второй который тебе как-раз и не подходит.Вот пробуй: http://rghost.ru/37015470 (http://rghost.ru/37015470). Название: Re: QFileDialog если файл не выбран Отправлено: Zeka13 от Март 14, 2012, 13:33 спасибо огромное, V1KT0P, вы могли просто посоветовать мне использовать констуктор с параметром =)
Мне можно было посоветовать это с самого начала и даже не писать за меня мой код Спасибо всем, кто проявил терпение и великодушее! Название: Re: QFileDialog если файл не выбран Отправлено: mutineer от Март 14, 2012, 14:34 спасибо огромное, V1KT0P, вы могли просто посоветовать мне использовать констуктор с параметром =) Мне можно было посоветовать это с самого начала и даже не писать за меня мой код Спасибо всем, кто проявил терпение и великодушее! Если бы ты изначально правильно описал ситуацию - получил бы сразу правильный ответ |