Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2013, 12:09   #1
Zurich
Пользователь
 
Регистрация: 05.03.2013
Сообщений: 13
По умолчанию Связывание (connect)

Здравствуйте!
Начал осваивать Qt. Читаю, пытаюсь разобраться в примерах из литературы. Сейчас написал программу, в которой есть два виджета:
spinBox и gorizontalSlider. Хочу их связать, для чего в main пишу:

QObject::connect(spinBox, SIGNAL(valueChanged(int)), horizontalSlider, SLOT(setValue(int)));

но программа выдает ошибку, она в main не знает, что такое spinBox и horizontalSlider.

Что надо еще "доопределить"?
Zurich вне форума Ответить с цитированием
Старый 20.03.2013, 12:14   #2
Zurich
Пользователь
 
Регистрация: 05.03.2013
Сообщений: 13
По умолчанию

Вот сейчас получилось их связать, но в файле ui_widget.h
Насколько я понимаю, это не совсем правильно
Zurich вне форума Ответить с цитированием
Старый 20.03.2013, 12:19   #3
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Вы виджеты как создавали? Дизайнер обычно прячет все в ui
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 20.03.2013, 13:12   #4
Zurich
Пользователь
 
Регистрация: 05.03.2013
Сообщений: 13
По умолчанию

Ну да, поэтому там и получается их связать. Создавал стандартно: файл/проект -> новый -> gui application. Мне сначала просто показалось, что там связывать как-то нехорошо, но теперь я понял, что это просто не вариант вовсе, т.к. при каждой перестройке проекта файл ui_widget.h переписывается заново и все вписанное затирает
Есть ли вариант заставить main "видеть" ui_widget.h? Или какое-то другое решение? Не удобно вручную прописывать все элементы, да и не видно их до запуска, что тоже не есть гуд (по крайней мере для меня).
Zurich вне форума Ответить с цитированием
Старый 20.03.2013, 16:27   #5
der_igel
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 29
По умолчанию

Код:
QObject::connect(spinBox, SIGNAL(valueChanged(int)), horizontalSlider, SLOT(setValue(int)));
Если стандартный проект пиши эту строку в MainWindow.cpp в конструкторе или в том месте где ты их определяешь.
der_igel вне форума Ответить с цитированием
Старый 20.03.2013, 19:54   #6
Zurich
Пользователь
 
Регистрация: 05.03.2013
Сообщений: 13
По умолчанию

Может неправильно вас понял, но я же пишу, что это элементы, которые я добавляю на форму, соответственно они определяются в ui_widget.h (я использую widget, а не mainwindow). И соответственно, если я вписываю

Код:
QObject::connect(spinBox, SIGNAL(valueChanged(int)),horizontalSlider, SLOT(setValue(int)));
в widget.cpp, то ничего не меняется - QT ругается на то, что он таких не знает.
При этом вверху я везде вставляю #include "ui_widget.h"
Zurich вне форума Ответить с цитированием
Старый 21.03.2013, 02:47   #7
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

А в widget.h класс есть? А в нем приватное поле ui есть? А "в нем" spinBox и прочее есть?..
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 21.03.2013, 09:28   #8
der_igel
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 29
По умолчанию

widget.cpp
Код:
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->spinBox, SIGNAL(valueChanged(int)),ui->horizontalSlider, SLOT(setValue(int)));
}

Widget::~Widget()
{
    delete ui;
}
der_igel вне форума Ответить с цитированием
Старый 21.03.2013, 14:17   #9
Zurich
Пользователь
 
Регистрация: 05.03.2013
Сообщений: 13
По умолчанию

der_igel, спасибо большое!
Думаю, мне просто надо еще побольше почитать, но все-таки можно небольшое пояснение. Почему в ui_widget.h компилятор воспринимает такую форму записи:
Код:
QObject::connect(horizontalSlider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));
а в widget.cpp только такую:

Код:
QObject::connect(ui->spinBox, SIGNAL(valueChanged(int)),ui->horizontalSlider, SLOT(setValue(int)));
?
Zurich вне форума Ответить с цитированием
Старый 21.03.2013, 17:28   #10
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Прочитайте мой пост.

Потому что в ui_widget.h вы "находитесь внутри" того типа, поле которого есть в классе widget.cpp. Вы же знаете как обращаются к полям класса?
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Connect по timeout Tahoma Win Api 8 26.07.2012 09:17
DC++(Direct Connect) azaznio Компоненты Delphi 2 15.02.2011 15:49
перехват CONNECT snakesoftware Win Api 9 05.05.2010 18:31
php connect Neymexa Помощь студентам 1 25.03.2010 11:38
Вирус z-connect Осипович Свободное общение 7 02.07.2009 21:20