Здравствуйте, гость ( Вход | Регистрация )
|
Andrewshkovskii |
27.12.2008, 16:09
Сообщение
#1
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Сабж. Я только сегодня сел изучать 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 |
27.12.2008, 16:20
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Andrewshkovskii, задачу я не понял. Расскажи без кода, просто на словах, что делает пользователь - что он видит.
Цитата(Andrewshkovskii @ 27.12.2008, 19:09) Link Какой слот или сигнал есть у комбобокса, возвращающий какое-либо значение, когда выбран элемент? слот не возвращает значение, а принимает. См. документацию Link подраздел Сигналы
|
|
|
|
|
Andrewshkovskii |
27.12.2008, 16:28
Сообщение
#3
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Хорошо, это сейчас полистаю.а что насчет "пустого" элемента?
|
|
|
|
|
Litkevich Yuriy |
27.12.2008, 16:34
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Andrewshkovskii @ 27.12.2008, 19:28) Link а что насчет "пустого" элемента? а вот я не понял, что ты под этим понимаешь.
|
|
|
|
|
Andrewshkovskii |
27.12.2008, 16:36
Сообщение
#5
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Ну..я попробывал через сигнал activated(),
QObject::connect(combobox,SIGNAL(activated(1)),mw,SLOT(show()));, вот так, mw- виджет.== ничего не происходит. Ну пустой элемент в моем понимании - это нулевое значение списка,тоесть НИЧЕГО НЕ ВЫБРАНО. и отображается как пустота в списке.. |
|
|
|
|
Litkevich Yuriy |
27.12.2008, 17:06
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Andrewshkovskii @ 27.12.2008, 19:36) Link QObject::connect(combobox,SIGNAL(activated(1)),mw,SLOT(show())); тут полная ересь, что за еденичка? Читай про Link.А также про функцию Link Цитата(Andrewshkovskii @ 27.12.2008, 19:36) Link ничего не происходит. на самом деле происходит. чтобы видеть, что происходит, добавь в свой pro-файл такую строку:CONFIG += console сделай qmake make и после запуска приложения у тебя появится консоль, в которую Qt будет сообщать об ошибка времени выполнения связанных либо с сигналами/слотами, либо с метаобъектной информацией, а также о драйверах СУБД. |
|
|
|
|
Litkevich Yuriy |
27.12.2008, 18:08
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Andrewshkovskii, если еще не понял ошибку с соединением, глянь в FAQ, набросал наскору руку: Link.
|
|
|
|
|
Andrewshkovskii |
27.12.2008, 18:28
Сообщение
#8
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Да я щас сижу код свой переписываю, с дуру начал писать без классов, просто сплошняком.щас доперепишу, буду разбираться..
|
|
|
|
|
Litkevich Yuriy |
27.12.2008, 18:34
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Andrewshkovskii @ 27.12.2008, 21:28) Link с дуру начал писать без классов, просто сплошняком.щас доперепишу, буду разбираться.. для мелких примеров можно и без классов.Замечание: При написании класса разделяй интерфес от реализации на два отдельных файла *.h и *.cpp (иначе прийдется руками инклюдить продукт деятельности MOC'а) |
|
|
|
|
Andrewshkovskii |
27.12.2008, 19:01
Сообщение
#10
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Да это я знаю, я на с++ пишу уже 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 |
27.12.2008, 19:06
Сообщение
#11
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Andrewshkovskii @ 27.12.2008, 22:01) Link Не пойму, в чем дело? реализация в отдельном файле?
|
|
|
|
|
Andrewshkovskii |
27.12.2008, 19:21
Сообщение
#12
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Да. в реализации этот метод не реализуется пока, в хидере лишь его описание лежит,.
|
|
|
|
|
Litkevich Yuriy |
27.12.2008, 19:25
Сообщение
#13
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Andrewshkovskii, предлагаю сделать примитивный пример, три файла main.cpp, class.h, class.cpp в классе реализовать
слот будет в консоль через qDebug() что-нибудь выводить. для проверки все ли в эклипсе настроено. Ну и не грех для начала в командной строке скомпилить. |
|
|
|
|
Andrewshkovskii |
27.12.2008, 20:09
Сообщение
#14
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Я, если честно, не совсем понял что хотелось от меня.Не, ну то что собрать консольное приложение это ясно.а вот остальное.я извиняюсь, но у меня просто уже голова не варит, я с 12 часов сижу с кутешечкой
Ой, QDevelop т.е |
|
|
|
|
Litkevich Yuriy |
27.12.2008, 20:13
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Andrewshkovskii @ 27.12.2008, 23:09) Link собрать консольное приложение это ясно не консольное. Просто без эклипса в командной строке в каталоге где лежит pro-файл, скомандовать:qmake make соберется? |
|
|
|
|
Andrewshkovskii |
27.12.2008, 20:21
Сообщение
#16
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
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 |
27.12.2008, 20:24
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Andrewshkovskii, у тебя примеры Qt'явые вообще компилятся?
Qt'я какой версии, как ставил? автойстановщик или компилил из исходников? я чую тебе сюда надо: Link |
|
|
|
|
Andrewshkovskii |
27.12.2008, 20:45
Сообщение
#18
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
щас попробую)
ИЗ сорцов собирал, по вашей инструкции. Сначала с новым мингв оно не хотело компилиться, взял тот, что с QtCreator идет, скомпилил. Т.к ещё и просто на С++ пишу, поставил обратно новый MinGw (5.1.4 вроде он) и вот я здесь.. попробывал с старым мингв, тот что с криэйтором шел(3. с чем-то) , тоже самое. Вообще, все компилиться кроме слотов.. ну, тоесть с ними поблема.. Примеры из книги Бланшета собираются нормально.. |
|
|
|
|
Litkevich Yuriy |
27.12.2008, 20:47
Сообщение
#19
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
попробуй вот это пример у себя, сначало в командной строке скомпилить, а потом в Эклипсе.
Qt_test1.zip ( 1.5 килобайт )
Кол-во скачиваний: 251 |
|
|
|
|
Andrewshkovskii |
27.12.2008, 20:50
Сообщение
#20
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Твой пример везде скомпилился нормально.значит что-то у меня в коде...:/
|
|
|
|
|
Litkevich Yuriy |
27.12.2008, 20:53
Сообщение
#21
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Andrewshkovskii, попробуй доработать этот пример, добавив сигнал в класс CTest и соеденить его со слотом, по аналогии с твоим приложением.
|
|
|
|
|
sagifire |
27.12.2008, 22:07
Сообщение
#22
|
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 5.11.2008 Пользователь №: 412 Спасибо сказали: 0 раз(а) Репутация: 1
|
Цитата(Andrewshkovskii @ 27.12.2008, 20:21) Link release/moc_mail_choose.o:moc_mail_choose.cpp:(.text+0x11e): undefined reference to `Mail_choose::findClicked()' Ошибка из-за отсутствия релизации метода Попробуй такое описание: void мой_метод(){return;} Или добавь реализацию метода в moc_mail_choose.cpp |
|
|
|
|
Andrewshkovskii |
27.12.2008, 22:17
Сообщение
#23
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
черт, не думал что qt требует наличие реализации сингалов..спасибо!
|
|
|
|
|
Litkevich Yuriy |
27.12.2008, 22:41
Сообщение
#24
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Andrewshkovskii @ 28.12.2008, 1:17) Link наличие реализации сингалов..спасибо! у сигнала не должно быть реализации!
|
|
|
|
|
Andrewshkovskii |
27.12.2008, 22:47
Сообщение
#25
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Это как это?может мы под реализацией понимаем каждый свое?
Ведь в хидере объявляешь сигнал .В сорце его реализуешь. как и обычные методы класса.что не так? |
|
|
|
|
sagifire |
27.12.2008, 22:54
Сообщение
#26
|
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 5.11.2008 Пользователь №: 412 Спасибо сказали: 0 раз(а) Репутация: 1
|
Для сигналов реализации не нужно, только для методов и слотов.
Но ошибка "undefined reference" значит отсутствие реализации |
|
|
|
|
Litkevich Yuriy |
27.12.2008, 23:04
Сообщение
#27
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(sagifire @ 28.12.2008, 1:54) Link Но ошибка "undefined reference" значит отсутствие реализации такая ошибка возникает, когда и объявление/интерфейс и реализация класса в одном файле. Но Andrewshkovskii, говорит, что они в разных. Поэтому не понятно в чем дело.
|
|
|
|
|
Andrewshkovskii |
28.12.2008, 0:49
Сообщение
#28
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Все, понял..сигналы генерируются..слоты вызываются по сигналам..спасибо
не...не получается.. Значит так : При изменении позиции в 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 |
28.12.2008, 0:56
Сообщение
#29
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Andrewshkovskii @ 28.12.2008, 3:49) Link Что я делаю не так?... завтра на свежую голову пример накидаю
|
|
|
|
|
Andrewshkovskii |
28.12.2008, 13:03
Сообщение
#30
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
Litkevich Yuriy, что насчет примера?..я просто никак успокоиться не могу..
|
|
|
|
|
Litkevich Yuriy |
28.12.2008, 13:54
Сообщение
#31
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Andrewshkovskii @ 28.12.2008, 16:03) Link что насчет примера? щас накидаю
|
|
|
|
|
Litkevich Yuriy |
28.12.2008, 14:41
Сообщение
#32
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
В этой программе два окошка, одно наследник QDialog. А второе просто для демонстрации работы самодельного сигнала.
main.cpp class.h class.cpp да кодировка файлов UTF-8, поэтому setCodecForTr имеет такое значение. если у тебя другая - исправь |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 30.12.2025, 13:03 |