Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77

Создание нового объекта в слоте.

18.07.2010, 11:34. Показов 2792. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем проблемка такая:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "ctf.h"
#include "ui_ctf.h"
#include <QtGui>
#include <QWidget>
 
CTF::CTF(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::CTF)
{
    ui->setupUi(this);
    connect(ui->action, SIGNAL (triggered()), this, SLOT (CreateNewTest()));
}
Здесь есть сигнал, ответом на который служит слот
C++
1
2
3
4
5
6
void CTF::CreateNewTest()
{
 QComboBox *TypeOfQuochtBox=new QComboBox;
 
 
}
Вот реализация этого слота. Здесь дожен создаваться новый объект и визуализация должна происходить на то же окно (метод
C++
1
TypeOfQuochtBox->show()
тут не подходит).
Собственно вопрос в том как мне совершить эту визуализацию.
Просто дело в том
C++
1
TypeOfQuochtBox=new QComboBox(this)
так же не работает. Пишет not declarated in this scope.

P.S. я новичок. Так что не судите строго) Заранее спасибо за ответ
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.07.2010, 11:34
Ответы с готовыми решениями:

Удаление объекта в слоте
У меня есть владелец, который хранит карту объектов. Объекты при отключении посылают сигнал. В слоте обработки я хочу удалить эти объекты...

Создание нового QDialog
signin.h файл #ifndef SIGNIN_H #define SIGNIN_H #include &lt;QDialog&gt; namespace Ui { class SignIn; } class SignIn : public...

Создание нового виджета
День добрый Может кто помочь (уже запарился искать как это сделать).. Нужно свзять кнопку и вызов нового виджета допустим есть: ...

16
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 13:39
Цитата Сообщение от ovoshlook Посмотреть сообщение
new Ui::CTF
ой, а че так можно
Цитата Сообщение от ovoshlook Посмотреть сообщение
QComboBox *TypeOfQuochtBox=new QComboBox;
зачем так делать, объект попадает вникуда
Цитата Сообщение от ovoshlook Посмотреть сообщение
TypeOfQuochtBox=new QComboBox(this)
вы же уже выделили, покажите полностью код слота
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
18.07.2010, 13:49  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
ой, а че так можно
Эта часть создается автоматически. Поэтому видимо можно))

Цитата Сообщение от alex_x_x Посмотреть сообщение
вы же уже выделили, покажите полностью код слота
Выше написан полный код слота, он собственно пока из одной сточки состоит: там только объект и должен создаваться.
Просто я пробывал вместо вот этого
C++
1
QComboBox *TypeOfQuochtBox=new QComboBox;
прописывать вот это
C++
1
TypeOfQuochtBox=new QComboBox;
И если в первом случае объект создается, но в новом окне, то во втором пишет TypeOfQuochtBox not declarated in this scope
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 13:52
вам нужно добавить описание
QComboBox *TypeOfQuochtBox;
в .h вашего окна, те в #include "ui_ctf.h", вы же ведь его не просто так включаете
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
18.07.2010, 14:00  [ТС]
Именно в #include "ui_ctf.h"??? На сколько я знаю, этот файл создается uic компилятором.

Ну и если туда то вопрос следующий. Я планирую использовать и другие виджеты.Может быть проще объявить там Qwidget?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 14:04
а, да ваша правда, в ctf.h конечно же
Цитата Сообщение от ovoshlook Посмотреть сообщение
Может быть проще объявить там Qwidget?
в смысле? какие будете использовать виджеты - те и объявляйте
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
18.07.2010, 14:09  [ТС]
Тогда у меня сл. вопрос. При объявлении его в ui_ctf.h он будет создаваться именно тогда, когда я пропишу это в слоте или тогда , когда запустится приложение?

Добавлено через 2 минуты
И кстати. Сейчас попробывал Ваш способ. К сожалению ничего не изменилось. Проблема все та же.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 14:10
Цитата Сообщение от ovoshlook Посмотреть сообщение
ui_ctf.h
этот файл автоматически генерится, так что он пропадет при следующем редактировании формы.
При объявлении в ctf.h - когда будет вызван слот, если хотите, что бы он создавался при появлении формы - положите создание в конструктор, а в слот show

в чем проблема, not declarated?
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
18.07.2010, 14:13  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
этот файл автоматически генерится, так что он пропадет при следующем редактировании формы.
При объявлении в ctf.h - когда будет вызван слот, если хотите, что бы он создавался при появлении формы - положите создание в конструктор, а в слот show

в чем проблема, not declarated?
Не совсепм понял смысла предложения) Наверное вы опечатались нечаянно?)

Оу) Сори понял))) Туплю)))
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 14:15
покажите ctf.h, ctf.cpp, ошибки и не мучьте
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
18.07.2010, 14:21  [ТС]
Извините за назойливость) В общем сделал следующее:

Прописал в ui_ctf.h так как вы сказали

В слоте прописал вместо всего предыдущего только ui->TypeOfQuochtBox->show();

Приложение запускается, но при попытке вызавть слот выскакиевает ошибка памяти. Память не может бытьтипа read

Выкладываю ctf.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
24
25
26
#ifndef CTF_H
#define CTF_H
#include <QtGui>
#include <QMainWindow>
 
namespace Ui {
    class CTF;
}
 
class CTF : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit CTF(QWidget *parent = 0);
    ~CTF();
 
private:
    Ui::CTF *ui;
 
public slots:
  void CreateNewTest();
 
};
 
#endif // CTF_H
и ctf.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "ctf.h"
#include "ui_ctf.h"
#include <QtGui>
#include <QWidget>
 
CTF::CTF(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::CTF)
{
    ui->setupUi(this);
    connect(ui->action, SIGNAL (triggered()), this, SLOT (CreateNewTest()));
}
void CTF::CreateNewTest()
{
 ui->TypeOfQuochtBox->show();
 
 
}
CTF::~CTF()
{
    delete ui;
}
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 14:28
Цитата Сообщение от ovoshlook Посмотреть сообщение
Прописал в ui_ctf.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
24
25
26
27
#ifndef CTF_H
#define CTF_H
#include <QtGui>
#include <QMainWindow>
 
namespace Ui {
    class CTF;
}
 
class CTF : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit CTF(QWidget *parent = 0);
    ~CTF();
 
private:
    Ui::CTF *ui;  
    QComboBox *TypeOfQuochtBox;
 
public slots:
  void CreateNewTest();
 
};
 
#endif // CTF_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "ctf.h"
#include "ui_ctf.h"
#include <QtGui>
#include <QWidget>
 
CTF::CTF(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::CTF)
{
    ui->setupUi(this);
    TypeOfQuochtBox = new QComboBox(this);
    TypeOfQuochtBox->setVisible( false );    
    connect(ui->action, SIGNAL (triggered()), this, SLOT (CreateNewTest()));
}
void CTF::CreateNewTest()
{
 TypeOfQuochtBox->show();
}
CTF::~CTF()
{
    delete ui;
}
только его нужно расположить в слое или в каком-нибудь контейнере чтоли
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
18.07.2010, 15:03  [ТС]
Примерно понял)) спасибо)) Буду мучить)))

Добавлено через 33 минуты
Следующий вопрос. Бросил на форму GroupBox. Все по идее замечательно и великолепно)) Дела. следующее:

C++
1
2
3
4
5
6
7
void CTF::CreateNewTest()
{
 groupBox->addWidget(TypeOfQuochtBox);
 TypeOfQuochtBox->show();
 
 
}
Пишет что элемент groupBox not declared Если же сделать просто
C++
1
2
3
4
5
6
void CTF::CreateNewTest()
{
 TypeOfQuochtBox->show();
 
 
}
То вылазиет ошибка памяти((
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 15:30
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
25
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow), TypeOfQuochtBox(new QComboBox(this))
{
    ui->setupUi(this);
    grid = new QGridLayout;
    TypeOfQuochtBox->setVisible( false );
    grid->addWidget( TypeOfQuochtBox );
    ui->groupBox->setLayout( grid );
    connect( ui->pushButton, SIGNAL(clicked(void)), SLOT(onClick(void)) );
}
 
void MainWindow::onClick(){
    TypeOfQuochtBox->show();
}
 
MainWindow::~MainWindow()
{
    delete grid;
    delete TypeOfQuochtBox;
    delete ui;
}
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
25
26
27
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QComboBox>
#include <QGridLayout>
 
namespace Ui {
    class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
public slots:
    void onClick();
private:
    Ui::MainWindow *ui;
    QComboBox* TypeOfQuochtBox;
    QGridLayout *grid;
};
 
#endif // MAINWINDOW_H
0
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
18.07.2010, 15:38  [ТС]
alex_x_x,
Вы мне обчень сильно помогаете) И я вам очень благодарен)

Но в данной задаче стоит принципиальная задача создания объекта именно в слоте. то есть по идее он до этого не должен быть создал (материализован).

Ваше решение несомненно хорошее, просто немного не подходит под суть моей задачи((
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
18.07.2010, 15:42
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    connect( ui->pushButton, SIGNAL(clicked(void)), SLOT(onClick(void)) );
}
 
void MainWindow::onClick(){
   TypeOfQuochtBox  = new QComboBox(this); 
   TypeOfQuochtBox->setVisible( false );
   grid->addWidget( TypeOfQuochtBox );
   ui->groupBox->setLayout( grid );
   TypeOfQuochtBox->show();
}
собсно ктож мешает)
1
3 / 3 / 0
Регистрация: 22.05.2010
Сообщений: 77
18.07.2010, 15:52  [ТС]
Разобрался)))) Спасибо большое вам))) Очень помогли))!!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.07.2010, 15:52
Помогаю со студенческими работами здесь

Создание и включение нового окна
Приветствую! Передо мной стоит задача - построить график гистограммы, что в принципе легко решаемо. Проблема в добавлении Label...

QList Создание нового списка
Есть список QList&lt;QPair&lt;QString,QString&gt;&gt;. Как сделать новый список из выделенных строк первого?

Создание нового окна существующего класса
Здравствуйте. Пытаюсь создать новое окно существующего класса MainWindow. В хедере написал private: Ui::MainWindow *ui; ...

Ошибка в слоте
Не пойму в чем ошибка: ошибка в строке 15 первого файла(C:\Qt\Qt5.2.0\Tools\QtCreator\bin\untitled\mainwindow.cpp:15: ошибка: no matching...

ошибка в слоте
Почему возникают ошибки в этом коде: #ifndef QGLQUAD_H #define QGLQUAD_H #include &lt;QGLWidget&gt; class OGLQuad : public...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru