![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Andrewshkovskii |
![]()
Сообщение
#1
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Сабж. Я только сегодня сел изучать Qt.. но никак не могу понять ,как реализовать сабж.
Допустим есть кнопочка : QPushButton *choose = new QPushButton("Выбрать!"); и выпадающий список : QStringList list; list << " " << "profile 1" << "profile 2" << "profile 3" << "profile 4" << "profile 5"; QComboBox *combobox = new QComboBox; combobox->addItems(list); Я так понимаю, что надо написать фукнцию, которая будет вызываться как сигнал, при выборе хотя бы одного элемента, так? Как её можно реализовать?Какой слот или сигнал есть у комбобокса, возвращающий какое-либо значение, когда выбран элемент? Ещё вопрос : Как сделать в списке пустой элемент?Я имею ввиду не " " - т.к это тоже элемент списка, и в моем случае, при его выборе, кнопка будет активной.Я про пустой не выбираемый элемент. Тоже самое мне надо реализовать для флажкой(QCheckBox).т.е , есть флажок, и таже самая кнопочка. Подскажите, пожалуйста.. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Andrewshkovskii, задачу я не понял. Расскажи без кода, просто на словах, что делает пользователь - что он видит.
Какой слот или сигнал есть у комбобокса, возвращающий какое-либо значение, когда выбран элемент? слот не возвращает значение, а принимает. См. документацию QComboBox подраздел Сигналы
|
|
|
Andrewshkovskii |
![]()
Сообщение
#3
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Хорошо, это сейчас полистаю.а что насчет "пустого" элемента?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Andrewshkovskii |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Ну..я попробывал через сигнал activated(),
QObject::connect(combobox,SIGNAL(activated(1)),mw,SLOT(show()));, вот так, mw- виджет.== ничего не происходит. Ну пустой элемент в моем понимании - это нулевое значение списка,тоесть НИЧЕГО НЕ ВЫБРАНО. и отображается как пустота в списке.. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
QObject::connect(combobox,SIGNAL(activated(1)),mw,SLOT(show())); тут полная ересь, что за еденичка? Читай про сигналы и слоты.А также про функцию QObject::connect ничего не происходит. на самом деле происходит. чтобы видеть, что происходит, добавь в свой pro-файл такую строку:CONFIG += console сделай qmake make и после запуска приложения у тебя появится консоль, в которую Qt будет сообщать об ошибка времени выполнения связанных либо с сигналами/слотами, либо с метаобъектной информацией, а также о драйверах СУБД. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Andrewshkovskii, если еще не понял ошибку с соединением, глянь в FAQ, набросал наскору руку: Сигналы и слоты (Qt).
|
|
|
Andrewshkovskii |
![]()
Сообщение
#8
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Да я щас сижу код свой переписываю, с дуру начал писать без классов, просто сплошняком.щас доперепишу, буду разбираться..
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
с дуру начал писать без классов, просто сплошняком.щас доперепишу, буду разбираться.. для мелких примеров можно и без классов.Замечание: При написании класса разделяй интерфес от реализации на два отдельных файла *.h и *.cpp (иначе прийдется руками инклюдить продукт деятельности MOC'а) |
|
|
Andrewshkovskii |
![]()
Сообщение
#10
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Да это я знаю, я на с++ пишу уже 2 года... сегодня сел просто за Qtшечку, и есть некоторые не понятки. Ну там как пример..диалоговое окно, там по критериям надо выбрать веб-почту ...
И так, проблема. Пытаюсь объявить закрытый слот :
Пишу в эклипсе, вот ерор лог : make: *** [release] Error 2 make[1]: *** [release\_.exe] Error 1 release/moc_mail_choose.o:moc_mail_choose.cpp: undefined reference to`Mail_choose::SetChooseButtonProfileEnable()' Не пойму, в чем дело? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#11
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Andrewshkovskii |
![]()
Сообщение
#12
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Да. в реализации этот метод не реализуется пока, в хидере лишь его описание лежит,.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#13
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Andrewshkovskii, предлагаю сделать примитивный пример, три файла main.cpp, class.h, class.cpp в классе реализовать
слот будет в консоль через qDebug() что-нибудь выводить. для проверки все ли в эклипсе настроено. Ну и не грех для начала в командной строке скомпилить. |
|
|
Andrewshkovskii |
![]()
Сообщение
#14
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Я, если честно, не совсем понял что хотелось от меня.Не, ну то что собрать консольное приложение это ясно.а вот остальное.я извиняюсь, но у меня просто уже голова не варит, я с 12 часов сижу с кутешечкой
![]() Ой, QDevelop т.е |
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Andrewshkovskii |
![]()
Сообщение
#16
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
C:\storage\programming\workspace\1>qmake
C:\storage\programming\workspace\1>make MAKE Version 4.0 Copyright © 1987, 1996 Borland International Fatal: 'FORCE' does not exist - don't know how to make it Пробывал так же "мэйкать" сорцы напрямую - не дало результата. упс, видимо у меня make не тот?борландовский от Bc5.. C:\storage\programming\workspace\1>qmake C:\storage\programming\workspace\1>mingw32-make.exe mingw32-make.exe -f Makefile.Release mingw32-make.exe[1]: Entering directory `C:/storage/programming/workspace/1' g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel oc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o release\_.exe release/mail_cho ose.o release/main.o release/moc_mail_choose.o -L"c:\storage\programming\qt-win -opensource-src-4.4.3\lib" -lmingw32 -lqtmain -lQtGui -lgdi32 -lcomdlg32 -loleau t32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCore -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32 release/moc_mail_choose.o:moc_mail_choose.cpp:(.text+0x11e): undefined reference to `Mail_choose::findClicked()' collect2: ld returned 1 exit status mingw32-make.exe[1]: *** [release\_.exe] Error 1 mingw32-make.exe[1]: Leaving directory `C:/storage/programming/workspace/1' mingw32-make.exe: *** [release] Error 2 C:\storage\programming\workspace\1> |
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Andrewshkovskii, у тебя примеры Qt'явые вообще компилятся?
Qt'я какой версии, как ставил? автойстановщик или компилил из исходников? я чую тебе сюда надо: Установка Qt |
|
|
Andrewshkovskii |
![]()
Сообщение
#18
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
щас попробую)
ИЗ сорцов собирал, по вашей инструкции. Сначала с новым мингв оно не хотело компилиться, взял тот, что с QtCreator идет, скомпилил. Т.к ещё и просто на С++ пишу, поставил обратно новый MinGw (5.1.4 вроде он) и вот я здесь.. попробывал с старым мингв, тот что с криэйтором шел(3. с чем-то) , тоже самое. Вообще, все компилиться кроме слотов.. ну, тоесть с ними поблема.. Примеры из книги Бланшета собираются нормально.. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#19
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
попробуй вот это пример у себя, сначало в командной строке скомпилить, а потом в Эклипсе.
![]() |
|
|
Andrewshkovskii |
![]()
Сообщение
#20
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Твой пример везде скомпилился нормально.значит что-то у меня в коде...:/
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#21
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Andrewshkovskii, попробуй доработать этот пример, добавив сигнал в класс CTest и соеденить его со слотом, по аналогии с твоим приложением.
|
|
|
sagifire |
![]()
Сообщение
#22
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 5.11.2008 Пользователь №: 412 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Andrewshkovskii |
![]()
Сообщение
#23
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
черт, не думал что qt требует наличие реализации сингалов..спасибо!
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#24
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Andrewshkovskii |
![]()
Сообщение
#25
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Это как это?может мы под реализацией понимаем каждый свое?
Ведь в хидере объявляешь сигнал .В сорце его реализуешь. как и обычные методы класса.что не так? |
|
|
sagifire |
![]()
Сообщение
#26
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 5.11.2008 Пользователь №: 412 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Для сигналов реализации не нужно, только для методов и слотов.
Но ошибка "undefined reference" значит отсутствие реализации |
|
|
Litkevich Yuriy |
![]()
Сообщение
#27
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Andrewshkovskii |
![]()
Сообщение
#28
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Все, понял..сигналы генерируются..слоты вызываются по сигналам..спасибо
не...не получается.. Значит так : При изменении позиции в QCombobox генерируется сигнал activated,так? Пишу слот : private slots: void SetChooseButtonProfileEnable(); Соединяю так : connect(ProfileList, SIGNAL(activated()), this, SLOT(SetChooseButtonCriteriaEnable() ) ); ProfileList - этой мой combobox. Что я делаю не так?... Реализация SetChooseButtonProfileEnable void Mail_choose:: SetChooseButtonProfileEnable(int index) { ChooseProfile->setEnabled(true); } ; +Поменял описания слота и соединение : connect(ProfileList,SIGNAL(activated(int)),this,SLOT(SetChooseButtonCriteriaEnab le(int))); Только смысла от этого... |
|
|
Litkevich Yuriy |
![]()
Сообщение
#29
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Andrewshkovskii |
![]()
Сообщение
#30
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Litkevich Yuriy, что насчет примера?..я просто никак успокоиться не могу..
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#31
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#32
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
В этой программе два окошка, одно наследник QDialog. А второе просто для демонстрации работы самодельного сигнала.
main.cpp
class.h
class.cpp
да кодировка файлов UTF-8, поэтому setCodecForTr имеет такое значение. если у тебя другая - исправь |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 3.6.2025, 19:03 |