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

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

Страниц: [1] 2 3 ... 6   Вниз
  Печать  
Автор Тема: Вторая форма в проекте.  (Прочитано 30604 раз)
Alexu007
Гость
« : Май 19, 2013, 21:53 »

Делаю по нагугленному: http://easy-qt.blogspot.ru/2012/10/1.html

Добавил в проект вторую форму, она по умолчанию назвалась не Form, а Ui_Form. Ну да ладно. Файлы .h и .cpp в проекте почему-то не показываются.

добавил #include "ui_form.h"

в объявлении класса создал указатель на новую форму   private:   Ui_Form *myform;

в конструкторе создал новую форму: myform = new Ui_Form();

ругается на строчку:

connect(ui->pushButton, SIGNAL(clicked()), myform, SLOT(show()));

1. Чё ей не нравится?
2. Я не хочу выводить форму на экран по нажатию кнопки. Я хочу вставить show() в конструктор, чтобы на экране сразу появлялись 2 формы. Это можно сделать?

Записан
qwyllum
Гость
« Ответ #1 : Май 19, 2013, 22:56 »

Прошу прощения за свои ламерские пять копеек. А почему бы не создать еще один класс на основе Dialog и не работать с ним? Qt сам сгенерит необходимый код. А в главной файле можете связать требуемые сигналы и слоты.
Записан
Alexu007
Гость
« Ответ #2 : Май 20, 2013, 07:50 »

Прошу прощения за свои ламерские пять копеек. А почему бы не создать еще один класс на основе Dialog и не работать с ним? Qt сам сгенерит необходимый код. А в главной файле можете связать требуемые сигналы и слоты.
Только потому, что в примере создаётся ещё один клас на основе Widget - и я сделал так же. Но сигналы и слоты почему-то не связываются. Попробую сделать то же самое с Dialogом.
Записан
Serr500
Гость
« Ответ #3 : Май 20, 2013, 08:28 »

ругается на строчку:

connect(ui->pushButton, SIGNAL(clicked()), myform, SLOT(show()));
Как именно ругается?
Записан
Alexu007
Гость
« Ответ #4 : Май 20, 2013, 15:36 »

Заморочки с добавлением формы в проект - добавляется только файл form.ui, а h и cpp нет.


Мля... разобрался. Нужно было добавлять класс form, а я всё пытался добавить только форму, ну она и добавлялась...


« Последнее редактирование: Май 20, 2013, 16:02 от Alexu007 » Записан
Alexu007
Гость
« Ответ #5 : Май 20, 2013, 18:23 »

Ну боле мене получилось, хочу такой дизайн. А как сделать, чтобы окна рисовались на раб. столе в определённом месте? Сейчас все три рисуются по центру, приходится раздвигать вручную.

У квадратных форм отключить (сделать неактивным) красный крестик, чтобы их нельзя было закрыть, только вместе с 3-м окном.

И еще ламерский вопрос. Мне нужна глобальная переменная, которую было бы видно во всех трёх модулях. Где её объявить?
« Последнее редактирование: Май 20, 2013, 18:27 от Alexu007 » Записан
Alexu007
Гость
« Ответ #6 : Май 21, 2013, 00:07 »

В файле widget.h

Код
C++ (Qt)
class ABC
{
public:
   static int table[10][10];
};

в файле widget.cpp

Код
C++ (Qt)
void Widget::MyEventHandler1()
   {
   ABC.table[1][1] = 5;
 
   return;
   }

ругается: C:\QtSDK\Alexu007\MBoy\untitled\widget.cpp:58: ошибка: expected unqualified-id before '.' token
Записан
Serr500
Гость
« Ответ #7 : Май 21, 2013, 08:19 »

ABC::table
Записан
Alexu007
Гость
« Ответ #8 : Май 21, 2013, 15:26 »

Спасиб большое. В общем, я выкрутился по другому: я перенес paintEventы и mousePressEventы в файл основной формы - и они "увидели" глобальные переменные! А вообще, что за хрень такая - область видимости файл? Кто это придумал? Мне приходится переписывать код программы в зависимости от того, в одном файле она написана или в нескольких...

Записан
Bepec
Гость
« Ответ #9 : Май 21, 2013, 17:20 »

Глобальные переменные - зло.
Да, без них иногда не обойтись, да, они нужны. Но злоупотреблять ими нельзя.

Область видимости только та, которую вы даёте переменной.
Записан
Alexu007
Гость
« Ответ #10 : Май 21, 2013, 18:55 »

В программе 3 формы: основная Widget и две вспомогательные Form_comp и Form_homo. На виджете прогрессбар, при клике кнопкой в Form_comp вызывается обработчик нажатия кнопки:

Код
C++ (Qt)
//обрабатывает клики мышкой в форме компьютера
void Form_comp::mousePressEvent( QMouseEvent *mouseEvent )
   {
 
 
   mouse_x = mouseEvent->x() / 25;
   mouse_y = mouseEvent->y() / 25;
 
   if(pole_Comp[mouse_x][mouse_y] == 0) pole_Comp[mouse_x][mouse_y] = 1;
   else pole_Comp[mouse_x][mouse_y] = 0;
 
   update();
 
   return;
   }

Как в обработчик Form_comp::mousePressEvent прикрутить progressBar_Homo->setValue(mouse_x * 10); из другой формы? Чтобы по нажатию кнопки в одной форме менялись показания progressBar в другой?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Май 21, 2013, 20:04 »

сигнал отправлять например, а коннектить в Widget
Записан

Изучением 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
Alexu007
Гость
« Ответ #12 : Май 22, 2013, 08:38 »

Спасиб, получилось.

А такой ещё вопрос: я когда запускю Qt и открываю проект, у меня каждый раз открывается окно "мои документы", и приходится каждый раз вручную кликать: диск С - QtSDK - Alexu007 - MBoy - untitled. А нельзя сделать, чтобы он на предыдущем проекте открывался?


И ещё: мне пришлось перетащить из form_homo.cpp в widget.cpp функции только потому, что они не видят глобальных переменных, объявленных в файле widget.cpp. Оно конечно и так работает, но в widget.cpp теперь многа функций, а form_homo.cpp стоит пустой. Как сделать, чтобы глобальная переменая была видна во всём проекте, а не только в файле, где она объявлена? С таким подходом мне ваще придётся всю программу в один файл запихивать...

Пробовал объявлять глобальные переменные в файле .h - компилятор ругается зараза...
« Последнее редактирование: Май 22, 2013, 09:12 от Alexu007 » Записан
lighting
Гость
« Ответ #13 : Май 22, 2013, 10:23 »

я когда запускю Qt и открываю проект, у меня каждый раз открывается окно "мои документы", и приходится каждый раз вручную кликать: диск С - QtSDK - Alexu007 - MBoy - untitled. А нельзя сделать, чтобы он на предыдущем проекте открывался?
Инструменты -> Параметры -> Сборка и запуск -> Основное -> Каталог проектов
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Май 22, 2013, 11:51 »

И ещё: мне пришлось перетащить из form_homo.cpp в widget.cpp функции только потому, что они не видят глобальных переменных, объявленных в файле widget.cpp. Оно конечно и так работает, но в widget.cpp теперь многа функций, а form_homo.cpp стоит пустой. Как сделать, чтобы глобальная переменая была видна во всём проекте, а не только в файле, где она объявлена? С таким подходом мне ваще придётся всю программу в один файл запихивать...
в form_homo.cpp пишешь где-нибудь в начале extern int myvar;
Пробовал объявлять глобальные переменные в файле .h - компилятор ругается зараза...
потому что их надо еще инициализировать значением в .cpp
Записан

Изучением 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
Страниц: [1] 2 3 ... 6   Вверх
  Печать  
 
Перейти в:  


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