crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Открытие существующего окна, Открытие нового окна при нажатии на кнопку
kadr
  опции профиля:
сообщение 24.6.2009, 21:50
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 24.6.2009
Пользователь №: 849

Спасибо сказали: 0 раз(а)




Репутация:   0  


Привет всем, подскажите у меня вот такая проблем, надо сделать так что бы при нажатии на кнопке открывался существующий виджет.
QWidget::*widget = new QWidget;
widget.show();
создает новый пустой виджет,а мне нужно что бы открывался уже сожданный виджет, как это можно сделать, подскажите! :help:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
defnull
  опции профиля:
сообщение 24.6.2009, 21:54
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 1.5.2008
Пользователь №: 165

Спасибо сказали: 0 раз(а)




Репутация:   1  


Цитата(kadr @ 24.6.2009, 22:50) *
Привет всем, подскажите у меня вот такая проблем, надо сделать так что бы при нажатии на кнопке открывался существующий виджет.
QWidget::*widget = new QWidget;
widget.show();
создает новый пустой виджет,а мне нужно что бы открывался уже сожданный виджет, как это можно сделать, подскажите! :help:


Надо сигнал нажатия кнопки соединить со слотом показа виджета
тоесть
QObject::connect(buttonName, SIGNAL(clicked()), widget, SLOT(show()));

widget уже должен существовать к тому моменту как ты соединяешь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kadr
  опции профиля:
сообщение 24.6.2009, 22:00
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 24.6.2009
Пользователь №: 849

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(defnull @ 24.6.2009, 22:54) *
Надо сигнал нажатия кнопки соединить со слотом показа виджета
тоесть
QObject::connect(buttonName, SIGNAL(clicked()), widget, SLOT(show()));

widget уже должен существовать к тому моменту как ты соединяешь

Не совсем понял как это сделать. Виджет у меня называется find_list.ui, кнопка find_date, то есть это должно выглядеть так:
QObject::connect(find_date, SIGNAL(clicked()), find_list.ui, SLOT(show()));
И само сабой он ругается на то что не find_date не find_list не объявлены, как и где их описать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
defnull
  опции профиля:
сообщение 24.6.2009, 22:08
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 1.5.2008
Пользователь №: 165

Спасибо сказали: 0 раз(а)




Репутация:   1  


Могу посоветовать почитать Макса Шлее Qt4 Профессиональное программирование на с++ там довольно не плохо описано всё..

у тебя должны быть уже созданы объекты кнопки и виджета которые ты соединяешь...
Будет проще если кинешь пример того, что ты пытаешься делать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kadr
  опции профиля:
сообщение 24.6.2009, 22:22
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 24.6.2009
Пользователь №: 849

Спасибо сказали: 0 раз(а)




Репутация:   0  


Одним словом я пытаюсь сделать так, что бы при нажатии на ссылку Поиск по дате в меню Действия, скрин которого я выкладываю, открывалось новое окно которое называется find_list.ui - виджет, вот впринципе и все что мне нужно узнать!

void MainWindow::on_find_date_activated()
{
QWidget *find_list = new QWidget;
QObject::connect(ui->find_date, SIGNAL(activated()), find_list.ui, SLOT(show()));
}
Вес код программы я так думаю нет смысла выкладывать!

Вот основное окно и окно которое должно открываться из основного при нажатии на ссылке.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.6.2009, 22:45
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


kadr, проделай уроки в "Учебном пособии"
Меньше времени потеряешь на освоении

Ещё можешь посмотреть короткий "Шуточный пример"

Цитата(kadr @ 25.6.2009, 2:22) *
QObject::connect(ui->find_date, SIGNAL(activated()), find_list.ui, SLOT(show()));
выделенное странно, как ты это трактуешь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
defnull
  опции профиля:
сообщение 24.6.2009, 22:53
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 1.5.2008
Пользователь №: 165

Спасибо сказали: 0 раз(а)




Репутация:   1  


Есть несколько соображений.. надеюсь я правильно всё понял
1) Если уж вы создаёте объект в слоте, то можно реализовать новое окно в качестве QDialog и вызывать его методом exec (если вам нужно блокирующее модальное окно).
тоесть как-то так

void MainWindow::on_find_date_activated()
{
QDialogClass *find_list = new QDialogClass();
find_list->exec();
delete find_list;
}

в примере выше QDialogClass это класс который наследуется от вашей Ui формы и от QDialog. После того как вызывается ecex выполнение функции останавливается и не действует до тех пор пока вы не закроете окно.

2) Если вы не хотите блокирующее окно а хотите просто его показать, то сам объект нужно создавать до вызова слота, например в конструкторе MainWindow.
и там же его соединять с менюшкой. Тогда сам слот on_find_date_activated() и не понадобится...

Я не могу понять запись
QWidget *find_list = new QWidget;
QObject::connect(ui->find_date, SIGNAL(activated()), find_list.ui, SLOT(show()));

вы создали новый виджет find_list а потом обращаетесь почему-то к find_list.ui. что вы этим хотели сделать? Если форму которая является виджетом, то я бы посоветова создать класс например MyWidget который бы наследовал QWidget и нужную Ui.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 13.1.2025, 20:50