Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/64: Рейтинг темы: голосов - 64, средняя оценка - 4.75
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393

Работа с 2 и более ui формами

28.11.2010, 16:54. Показов 12087. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, такая вот проблема, не смог найти материал как создать приложение в котором 2 ui окна, причём одно окно вызывается из другого при помощи кнопки, + значение int переменной передалось из основного окна в label вызываемого окна. Пожалуйста напишите пример как такое можно реализовать...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2010, 16:54
Ответы с готовыми решениями:

Работа с двумя и более формами...
Как-то внезапно пришлось научиться писать на делфи, но после паскаля никак не могу освоиться. Буду весьма признателен за помощь) В...

Работа с формами
Всем привет. У меня есть MDI Application в Builder 6. У главной формы есть две дочерних - поиск(Данные выводятся в виде таблички в...

Работа с формами
Помогите решить. Вводится N произвольных целых чисел. Определить количество четных чисел. Возможна, например, следующая реализация: ...

18
1 / 1 / 0
Регистрация: 26.11.2010
Сообщений: 21
02.12.2010, 15:20
Могу предложить решение первой задачи (вызов второго окна из первого)

Должно помочь.
Вложения
Тип файла: rar dvaOkna.rar (514.0 Кб, 580 просмотров)
1
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393
03.12.2010, 02:54  [ТС]
Спс! Теперь осталось сделать так, чтобы второе окно удалялась из оперативной памяти)) каждый раз когда вызываю программа увеличивается в размере на пол мб!
0
1 / 1 / 0
Регистрация: 26.11.2010
Сообщений: 21
03.12.2010, 10:29
Не пойму Где он увеличивается? Размеры всех файлов проверил, ничего не меняется (не увеличивается, не уменьшается).

Добавлено через 3 минуты
Попробуй в деструкторе удалять форму. Может поможет. Я пока сам изучаю, так что с полной уверенностью сказать не могу...
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
03.12.2010, 10:33
C++
1
QWidget *window = new QWidget( parent, Qt::WA_DeleteOnClose );
будет удаляться
0
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393
03.12.2010, 16:30  [ТС]
Цитата Сообщение от Tramtararam Посмотреть сообщение
Не пойму Где он увеличивается? Размеры всех файлов проверил, ничего не меняется (не увеличивается, не уменьшается).

Добавлено через 3 минуты
Попробуй в деструкторе удалять форму. Может поможет. Я пока сам изучаю, так что с полной уверенностью сказать не могу...
Ну как бы главный минус Qt - это плата за кросс платформенность размерами программы (из за необходимости копирования библиотек QtGuid4.dll к примеру(вес этой библиотеки уже 140 мб), для самой программы весом в 2 мб это уже слишком круто), это первое, про увеличение размеров я про занимаемое место в оперативной памяти, можешь обратить внимание когда из основного окна запускаешь второстепенное окно, размер программы в оперативной памяти увеличивается почти на 1 мб, при условии что оно пустое...
Но по сравнению с моими попытками это более менее чем ничего Буду тоже думать модифицировать)))

Добавлено через 26 минут
Цитата Сообщение от reich Посмотреть сообщение
C++
1
QWidget *window = new QWidget( parent, Qt::WA_DeleteOnClose );
будет удаляться
Никогда не пробовал, поэтому затруднение куда нужно вставить, чтобы компилятор меня правильно понял
C++
1
Qt::WA_DeleteOnClose
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
03.12.2010, 17:30
Цитата Сообщение от dark.k Посмотреть сообщение
Никогда не пробовал, поэтому затруднение куда нужно вставить, чтобы компилятор меня правильно понял
C++
1
Qt::WA_DeleteOnClose
передавать в качестве второго параметра в конструктор создаваемого дочернего окна
0
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393
04.12.2010, 16:55  [ТС]
Цитата Сообщение от reich Посмотреть сообщение
передавать в качестве второго параметра в конструктор создаваемого дочернего окна
Само окно создается в cpp файле основного, примерно так:

C++
1
2
3
4
5
6
void dvaOkna::klick()
{
        okno *dir;
        dir = new okno();
        dir->show();
}
C++
1
Qt::WA_DeleteOnClose
и ему не нравится

Добавлено через 7 минут
Выложить все исходники?
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
04.12.2010, 16:57
чем такой вариант не нравится?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//okno.h
class Okno: public QWidget {
    public:
        Okno( QWidget *parent = 0 ): QWidget( parent, Qt::WA_DeleteOnClose ){
        }
        ~Okno(){}
}
 
//*.cpp
#include "Okno.h"
//................
void dvaOkna::klick(){
        Okno *dir = new Okno;
        dir->show();
}
0
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393
05.12.2010, 17:22  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// dvaokna.h - главное окно
#ifndef DVAOKNA_H
#define DVAOKNA_H
 
#include <QtGui/QWidget>
#include "ui_dvaokna.h"
#include "okno.h"
 
class dvaOkna : public QWidget
{
    Q_OBJECT
 
public:
    dvaOkna(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~dvaOkna();
 
private:
    Ui::dvaOknaClass ui;
 
    public slots:
        void klick();
};
 
#endif // DVAOKNA_H
////////////////////////////

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// dvaokna.cpp
 
#include "dvaokna.h"
 
 
dvaOkna::dvaOkna(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    ui.setupUi(this);
        QObject::connect(ui.pushButton, SIGNAL(clicked()), SLOT(klick()));
}
 
dvaOkna::~dvaOkna()
{
 
}
 
void dvaOkna::klick()
{
        okno *dir;
        dir = new okno();
        dir->show();
}
//////////////////////

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// okno.h
 
#ifndef OKNO_H
#define OKNO_H
 
#include <QWidget>
#include "ui_okno.h"
 
class okno : public QWidget
{
    Q_OBJECT
 
public:
    okno(QWidget *parent = 0);
        ~okno();
 
private:
    Ui::oknoClass ui;
};
 
#endif // OKNO_H
////////////////////

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//okno.cpp
 
#include "okno.h"
 
okno::okno(QWidget *parent)
    : QWidget(parent)
{
        ui.setupUi(this);
}
 
okno::~okno()
{
 
}
Тут момент чуть иначе чем ты думаешь, я бы с радостью уже сделал, но компилятор на какую то ошибку с
C++
1
QWidget
выдает...
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
05.12.2010, 17:51
какую именно ошибку?
0
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393
07.12.2010, 17:47  [ТС]
вот допустим насколько я понимаю как устанавливается атрибут из твоего примера и что высвечивается:
Миниатюры
Работа с 2 и более ui формами  
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
07.12.2010, 19:37
Вот работающий пример. Qt 4.7.1. Для удаления устанавливаем атрибут
C++
1
setAttribute( Qt::WA_DeleteOnClose, true );
в более ранних версиях Qt можно было передавать этот параметр в конструктор QWidget
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include "mainwindow.h"
#include <QtGui/QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
mainwindow.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QtGui/QMainWindow>
#include "ui_mainwindow.h"
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~MainWindow();
 
private slots:
    void createWindow();
 
private:
    Ui::MainWindowClass ui;
};
 
#endif // MAINWINDOW_H
mainwindow.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "mainwindow.h"
#include "window.h"
 
MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags){
    ui.setupUi(this);
    connect( ui.pushButton, SIGNAL( clicked() ), this, SLOT( createWindow() ) );
}
 
MainWindow::~MainWindow()
{
 
}
 
//private slots
void MainWindow::createWindow(){
    Window *w = new Window( this );
    w->show();
}
window.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef WINDOW_H
#define WINDOW_H
 
#include <QWidget>
#include "ui_window.h"
 
class Window : public QWidget
{
    Q_OBJECT
 
public:
    Window(QWidget *parent = 0);
    ~Window();
 
private:
    Ui::Window ui;
};
 
#endif // WINDOW_H
window.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
#include "window.h"
 
Window::Window(QWidget *parent): QWidget(parent, Qt::Window){
    ui.setupUi(this);
    setAttribute( Qt::WA_DeleteOnClose, true );
}
 
Window::~Window()
{
 
}
1
11 / 11 / 1
Регистрация: 20.08.2010
Сообщений: 27
09.12.2010, 01:44
dark.k, передачу int переменной можно осуществить, просто добавив во второй класс privat(или не обязательно privat) переменную int, и в конструкторе, соответственно, будет уже что-то типа:
C++
1
Window(QWidget *parent = 0, int num=0);
- а в свою label просто вставляем:
C++
1
твояLabel->setText(QString::number(num));.

ps в вызове окна также сделать, конечно, нужно

C++
1
    Window *w = new Window(0, 5/*-это твой int*/ );
0
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393
09.12.2010, 11:04  [ТС]
[QUOTE=reich;1178495]Вот работающий пример. Qt 4.7.1. Для удаления устанавливаем атрибут
C++
1
setAttribute( Qt::WA_DeleteOnClose, true );
Даааааа.... И как я не догадался проверить такой метод как setAttribute(), вставил и всё отлично работает и удаляется! Спс)))
0
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393
09.12.2010, 12:32  [ТС]
Attos, спс всё норм, цифры выводит, у меня ещё одна проблема, не могу вводимый текст из основного окна передать в окно предупреждения или в дочернее, а именно на русском языке используя QString::fromLocal8Bit() выдаёт следующее:
Миниатюры
Работа с 2 и более ui формами  
0
11 / 11 / 1
Регистрация: 20.08.2010
Сообщений: 27
09.12.2010, 23:21
dark.k, во-первых, у тебя ж написано в ошибке: нет функции, принимающей QString&, а есть, которая принимает const char*. Поэтому или напиши &cc (может неявно сама приведет тип), или переведи QString в char* - наверняка есть такие функции...
А вообще я пишу в начале проги в main'е
C++
1
    QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));
а потом все русские тексты помещаю не просто в кавычки а в
C++
1
tr("русский текст")
tr - спец функция класса QObject..

хотя ты прямо из lineEdit берешь....но я счас попробовал в своей проге что-то типа

C++
1
2
3
4
        QMessageBox msgBox;
        QString n(ui->lineEdit->text());
        msgBox.setText(n);
        msgBox.exec();
И все на русском вывелось...
0
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393
10.12.2010, 12:52  [ТС]
Attos

C++
1
QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));
спс, необходимая вещь)))

правда есть интересный факт, после комментирования этой записи компилятор не выдает никаких ошибок и сама переменная нормально выводится без tr() или QString::fromLocal8Bit() на русском языке, до этого выводилось иероглифами! аномалия какая то)))
0
 Аватар для dark.k
80 / 69 / 9
Регистрация: 11.12.2009
Сообщений: 393
21.02.2011, 04:22  [ТС]
Вижу что тема актуальна, вот пример как организовать второе окно, с которого можно очень просто получить значения переменных =) предварительно через "Qt Command Prompt" прогоните командами
qmake -project
qmake <название про файла>.pro
Вложения
Тип файла: zip 2 окна.zip (3.4 Кб, 122 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.02.2011, 04:22
Помогаю со студенческими работами здесь

Работа с формами
Есть две формы. Из первой формы открывается вторая. #include &quot;Unit3.h&quot; Form3-&gt;ShowModal(); После выполнения каких-то действий во...

Работа с формами
При щелчке по кнопке ОК формы «Меню» вывести в области «Счет» суммарную стоимость выбранных блюд. 2. Вывести названия блюд, стоимость ...

1C 8.2 Работа с формами
Здравствуйте, в общем проблема такая: есть 2 обработки, ну или 2 формы(управляемые) у одной обработки. Нужно программно из одной формы...

Работа с формами
Здравствуйте Форумчане.У меня такая проблема(Даны 2 формы,в одной из них имеется лейбел(с текстом &quot;Введите пароль&quot;),вод...

Работа с формами
1.Составить программу, благодаря которой пользователь может выбрать цвет фона из предложенного списка. 2. Файлы. Написать программу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru