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

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

Страниц: 1 [2] 3 4 5   Вниз
  Печать  
Автор Тема: QFileDialog если файл не выбран[РЕШЕНО]  (Прочитано 29522 раз)
sudo
Гость
« Ответ #15 : Март 11, 2012, 17:40 »

Значит, всё-таки не диалог, а виджет. Вообще, мы тут можем долго гадать, поэтому в идеале посмотреть бы код хедера и реализации (не целиком, только то, что относится к делу)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #16 : Март 11, 2012, 17:42 »

от кого наследуется окно В?
Записан

Изучением 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
Zeka13
Гость
« Ответ #17 : Март 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) :
    QMainWindow(parent),
    ui(new Ui::Plot)
{
.......................

    //открытие файла

    QString str = QFileDialog::getOpenFileName(0, "Выберити файл для открытия", "", "*.plot");
    if(!str.isEmpty())
      //close();

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

}


Код:
void MainWindow::drawPlot()
{
        Plot y;
        y.show();
}
Записан
sudo
Гость
« Ответ #18 : Март 11, 2012, 18:08 »

я же написал, что это QMainWindow

Забыл. В приложении не должно быть двух QMainWindow. Оно на то и главное окно, чтобы быть в одном экземпляре. Более чем уверен, что его безболезненно можно заменить на QDialog, раз оно поверх главного окна, и закрывать acceptом/rejectом, либо на QWidget без родителя
Записан
Zeka13
Гость
« Ответ #19 : Март 11, 2012, 18:48 »

окей, я перепишу на QWidget, что мне тогда нужно будет сделать?
Записан
sudo
Гость
« Ответ #20 : Март 11, 2012, 18:56 »

Поменять форму в дизайнере и закрывать методом close()
Записан
Zeka13
Гость
« Ответ #21 : Март 11, 2012, 21:12 »

Код:
Поменять форму в дизайнере
не понял
я переделал на QWidget, close(); не работает
« Последнее редактирование: Март 11, 2012, 21:19 от Zeka13 » Записан
sudo
Гость
« Ответ #22 : Март 12, 2012, 10:10 »

Если не работает, значит что-то ещё не так
Записан
_OLEGator_
Гость
« Ответ #23 : Март 12, 2012, 10:36 »

не может close() не работать. Почему он в коде закомментирован? Полный код тогда давайте.
Записан
Zeka13
Гость
« Ответ #24 : Март 12, 2012, 18:07 »

разумеется я раскоментировал!
Так а какой ещё код нужен, всё же выше написано!
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #25 : Март 12, 2012, 18:19 »

Код:
Plot::Plot(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Plot)
{
    QString str = QFileDialog::getOpenFileName(0, "Выберити файл для открытия", "", "*.plot");
    if(!str.isEmpty())
      //close();
}

Код
C++ (Qt)
Plot::Plot(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::Plot)
{
   QTimer::singleShot(0, this, SLOT(slotDelayedInit()));
}
 
void Plot::slotDelayedInit()
{
   QString str = QFileDialog::getOpenFileName(0, tr("Choose a file"), QString(), "*.plot");
 
   if(str.isEmpty())
     close();
}
 
Записан
Zeka13
Гость
« Ответ #26 : Март 12, 2012, 18:25 »

спасибо за ответ, но ещё не попробовал ваше реализацию!
А в конструкторе нельзя закрыть окно никак?

Может я как-то не правильно создаю новые окно?
У меня например если закрывается главное окно, то побочные нормально сами по себе живут
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



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

если хочется закрыть окно в конструкторе, то это не очень хороший подход - лучше вынести условие, отвечающее за появление окна, в класс родителя (т.е. окна-предка).

если "побочным" не указать родителя, то они будут жить сами по себе.
Записан

Изучением 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
sudo
Гость
« Ответ #28 : Март 12, 2012, 18:38 »

Во я слепой Веселый
Так а чего мы в конструкторе закрывать-то будем? Окно ж ещё не показано. Я так понимаю, вызывающий код такой:

Код
C++ (Qt)
Plot plot;    // внутри вызывается close(), но окно ещё не показано
plot.show();
 

Тогда можно так
Код
C++ (Qt)
Plot plot;
plot.show();
QString file = plot.openFile();
if (file.isEmpty())
 plot.close();
 
Записан
Zeka13
Гость
« Ответ #29 : Март 12, 2012, 19:59 »

спасибо за ответы, буду разбираться!
Записан
Страниц: 1 [2] 3 4 5   Вверх
  Печать  
 
Перейти в:  


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