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

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

Страниц: 1 2 [3] 4 5   Вниз
  Печать  
Автор Тема: QFileDialog если файл не выбран[РЕШЕНО]  (Прочитано 29489 раз)
Zeka13
Гость
« Ответ #30 : Март 12, 2012, 22:25 »

Alex Custov, Вас я совсем не понял
kambala, спасибо, но у меня так и сделано, закрыть то в итоге как?
sudo, если так, как вы подсказали, реализовывать, то я не понимаю как передать str, ведь так оно задастся в классе MainWindow, а мне str нужна будет в классе Plot, а множественное наследование в Qt как я понял не реализуемо вот так
Код:
#ifndef PLOT_H
#define PLOT_H

#include <QWidget>

#include "mainwindow.h"

namespace Ui {
    class Plot;
}

[b]class Plot : public QWidget, public MainWindow // в MainWindow описал str как открытую переменную
[/b]{
    Q_OBJECT

public:
    explicit Plot(QWidget *parent = 0);
    ~Plot();

private:
    Ui::Plot *ui;
};

#endif // PLOT_H
Записан
V1KT0P
Гость
« Ответ #31 : Март 12, 2012, 22:30 »

спасибо за ответы, буду разбираться!
Минимально неработающий код в студию! А то этот тред похож на общение начинающих телепатов  Смеющийся.
Записан
Zeka13
Гость
« Ответ #32 : Март 12, 2012, 22:46 »

так а чем вам мой пост выше не нравится?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #33 : Март 12, 2012, 22:54 »

kambala, спасибо, но у меня так и сделано, закрыть то в итоге как?
если так и сделано (выбирать файл в слоте родителя, и если файл выбран, то создавать диалог), то зачем тогда пытаться закрыть окно в конструкторе?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
V1KT0P
Гость
« Ответ #34 : Март 12, 2012, 22:57 »

так а чем вам мой пост выше не нравится?
Ну смотри, вот это:
Код:
public QWidget, public MainWindow
MainWindow ведь наследник он QMainWindow? Если да, то QMainWindow ведь унаследован от QWidget. Плюс и они оба унаследованы от QObjects. Как компилятор должен такую мешанину в один класс запихнуть?
Мне например проще скачать код запустить, убедиться что он не работает и затем сразу поправить и проверить.
Записан
V1KT0P
Гость
« Ответ #35 : Март 12, 2012, 23:11 »

Ещё раз
есть главное окно(A), из него открыть можно другое окно(B), в это другом окне(B) создаётся диалог выбора файла и если файл не выбран, то должно закрыться окно B
Ты вот это хотел? http://rghost.ru/36992424
Записан
Bepec
Гость
« Ответ #36 : Март 13, 2012, 07:07 »

Жесть Веселый привнесу нотку своего оффтопа - помоему вместо "отправить читать учебники и учиться" консилиум тут решает проблему методом "напишем за него, а там видно будет" Улыбающийся
Записан
Zeka13
Гость
« Ответ #37 : Март 13, 2012, 08:06 »

V1KT0P, так оно так, но у вас только одна форма в дизайнере, а у меня две!
Про наследование я понял, что так нельзя, только как я тогда str передам?
Цитировать
sudo, если так, как вы подсказали, реализовывать, то я не понимаю как передать str, ведь так оно задастся в классе MainWindow, а мне str нужна будет в классе Plot, а множественное

Bepec, я читаю, просто в этом случае не смог разобраться
Записан
Bepec
Гость
« Ответ #38 : Март 13, 2012, 09:41 »

Блин ёмое. Нужна тебе эта str - так вообще передавай её прямым вызовом функции, сигналом, в конструкторе её инициализируй чоле Улыбающийся

Или указатель/ссылку на него передавай. Проблема выеденного яйца не стоит ёмоё.
Записан
V1KT0P
Гость
« Ответ #39 : Март 13, 2012, 09:42 »

V1KT0P, так оно так, но у вас только одна форма в дизайнере, а у меня две!
Вот поэтому я и говорю что нужно выложить минимальный нерабочий вариант, ибо одно и то-же можно сделать многими способами.
Записан
sudo
Гость
« Ответ #40 : Март 13, 2012, 10:54 »

Вариантов вагон и маленькая тележка

Можно вот так:
Код
C++ (Qt)
Plot plot;
plot.show();
QString file = plot.openFile();
if (file.isEmpty())
 plot.close();
else
 plot.setFileName(file);
 

Можно так:
Код
C++ (Qt)
void Plot::show()
{
 QString file = plot.openFile();
 if (!file.isEmpty())
   QWidget::show();
}
 

Можно сигнал послать, только зачем, или ещё чего придумать
Записан
Zeka13
Гость
« Ответ #41 : Март 13, 2012, 14:40 »

оформил так

Код:
void MainWindow::showPlot()
{
    Plot *bufka2 = new Plot;
    bufka2->show();
}



Код:
void MainWindow::drawPlot()
{
        Plot y;
        y.show();
        //открытие файла
        QString strCheck = QFileDialog::getOpenFileName(0, "Выберити файл для открытия", "", "*.plot");
        if(!strCheck.isEmpty())
              y.close();
        else
          y.setFileName(strCheck);
}

Код:
void Plot::setFileName(QString strCheck)
{
    str=strCheck;
}

Код:
#ifndef PLOT_H
#define PLOT_H

#include <QWidget>

...............

namespace Ui {
    class Plot;
}

class Plot : public QWidget
{
    Q_OBJECT

public:
    explicit Plot(QWidget *parent = 0);
    ~Plot();
    QString str;
    void setFileName(QString strCheck);
protected:
    ....................
private:
    Ui::Plot *ui;
};

#endif // PLOT_H

Скомпилилось, но теперь при нажатии на кнопку, после которой предлагалось выбрать файл програ падает
Цитировать
QFSFileEngine::open: No file name specified
« Последнее редактирование: Март 13, 2012, 14:42 от Zeka13 » Записан
mutineer
Гость
« Ответ #42 : Март 13, 2012, 14:43 »

Код
C++ (Qt)
if(!strCheck.isEmpty())
             y.close();
       else
         y.setFileName(strCheck);
ты уверен, что закрывать надо именно при непустой строке?
Записан
Zeka13
Гость
« Ответ #43 : Март 13, 2012, 14:50 »

закрыть надо при пустой, разве не так проверить на пустоту?

а вообще даже если так написать, всё равно даже выбор файла не появится
Код:
void MainWindow::drawPlot()
{
//мне кажется так не правильно!
        Plot y;
        y.show();
        //открытие файла
        QString strCheck = QFileDialog::getOpenFileName(0, "Выберити файл для открытия", "", "*.plot");
        if(!strCheck.isEmpty())
            y.setFileName(strCheck);

        else
            y.close();
}
Записан
QuAzI
Гость
« Ответ #44 : Март 13, 2012, 14:52 »

Zeka13, вообще в идеале когда просят код и это не закрытая разработка, выложить архив с проектом, чтобы его мог народ нормально его видеть ВЕСЬ, скомпилить и запустить и оно переделывается и решается за 2 минуты.

По части вашего кода... это вообще маразм показывать форму чтобы её закрыть. По моему это свободно решается так:
Код:
void MainWindow::drawPlot()
{
        QString strCheck = QFileDialog::getOpenFileName(0, "Выберити файл для открытия", "", "*.plot");
        if(!strCheck.isEmpty())
       {
           Plot y;
           y.setFileName(strCheck);
           y.show();
       }
}
Окно B будет показано при условии что файл нужный окну выбран. Что ещё надо для счастья?
Записан
Страниц: 1 2 [3] 4 5   Вверх
  Печать  
 
Перейти в:  


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