тем, кто писал что-нибудь на qt4. (вопрос 2)
2) есть ли в сети qt для линухи. у соседа стоит мандрива. там не компилится нифига (т.е. создаёшь пустой проект в kdevelop, а он не собирается - жалуется на отсутсвие заголовочного файла. и его реально нет. в бсд c qt4.3 этот этап был пройден)наверное у соседа не стоит какого-нибудь пакета типа qt4-dev.
зачем тебе искать qt4 для линукс в сети? у мандривы же есть менеджер пакетов.
1) как прогать под qt под виндой. гугл выдал на удивление мало полезногоhttp://trolltech.com/developer/downloads/qt/windows смотрел? Недавно ради интереса собирал под mingw, там есть примеры, какие-то утилиты для разработки.
P.S. Сам на Qt не пишу, ничего не знаю. :-)
qt4-devстоит. там заголовочных файлов много.
апд:он тоже есть. все заголовки лежат в /usr/lib/qt4/include/
это нормально?
где прописать в kdevelop, чтобы он этот путь подключил?
видать версия не та.
у мандривы же есть менеджер пакетов.
ну я предполагаю, что qt тяжеловат, хотя не знаю
bugaga ~ $ emerge -pv qt
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild NS ] x11-libs/qt-4.3.1 USE="gif jpeg opengl ... -xinerama" INPUT_DEVICES="-wacom" 42,109 kB
http://search.local/fastsearch.pl?what=qt+4.3.1+x11&file...
собираешь сам, устанавливаешь в /usr/local. Делаешь симлинки, чтобы при вызове qmake вызывался тот файл, что ты установил.
Это по второму вопросу
собираешь сам, устанавливаешь в /usr/local. Делаешь симлинки, чтобы при вызове qmake вызывался тот файл, что ты установил.
Это по второму вопросу
где прописать в kdevelop, чтобы он этот путь подключил?kdevelop тут не причем, "подключает" путь qmake
поизучай внимательно генеренный qmake-ом мейкфайл и какие команды компиляции он там пишет (инклюды в gcc: -Ipath)
вообще, советую разбираться без kdevelop, чтобы лучше понимать происходящее
под виндой тоже просто - генерится проект для студии с помощью qmake, дальше она сама работает
дизайнер генерит обычные xml файлы, которые не зависят от платформы.
чтобы все работало правильно, главное - корректно создать проект qmake, указать там все cpp, h, ui
Я думаю, что разработчики FreeBSD уже придумали, как сделать это
не самому. Если же они всё-таки не сподобились, то это сделали
за них разработчики NetBSD и DragonFlyBSD.
---
"Не изобретай велосипеды, их уже изобрели за тебя."
Leo
Не знаю, откуда такая уверенность:
# $NetBSD: Makefile.common,v 1.5 2007/03/18 17:34:41 adam Exp $
DISTNAME= qt-x11-opensource-src-${QTVERSION}
CATEGORIES= x11
MASTER_SITES= ftp://ftp.trolltech.com/qt/source/ \
ftp://ftp.bero.org/pub/qt/source/
.include "../../x11/qt4/Makefile.common"
# $NetBSD: Makefile.common,v 1.8 2007/07/28 07:37:51 adam Exp $
QTVERSION= 4.3.0
MAINTAINER= NetBSD.org
Разворачивай pkgsrc, ports _на_самом_деле_ очень сильно отстают.
Location: http://pkgsrc.org/
---
"NetBSD is JIHBED!"
qt компилится.
---
...Я работаю антинаучным аферистом...
как узнать, кто послал сигнал в слот?
или как создать свой сигнал наиболее просто, например у тестового поля (QLineEdit)
проблема такая:
есть много полей qlineedit, есть слот, который что-то делает, когда в поле нажимают enter, но то, что он делает, завит от того, из какого поля пришёл сигнал.
например:
есть slot Aslot.
есть два объекта qlineedit edit1, edit2 (создаются они НЕ вручную!)
у них есть стандартный сигнал
void returnPressed
я вижу 2 пути.
первый:
из Aslot узнать, кто хозяин сигнала, изъять значение поля и дальше уже с ними работать.
(далее первый вопрос выше.)
второй:
сделать slot Bslot(QWidget* sender)
тогда нужно как-то сделать ещё один сигнал.
(далее встаёт второй вопрос.)
как узнать, кто послал сигнал в слот?стандартно — никак
или как создать свой сигнал наиболее просто, например у тестового поля (QLineEdit)пронаследовать его и добавить свой сигнал
по сути: хороший путь — создать столько слотов, сколько lineedit'ов и приконнектить каждый к своему.
плохой путь — создать слот который будет принимать указатель на того, кто послал сигнал (как у тебя во втором пути). что бы понять, кто конкретно — либо пронаследовать lineedit и добавить свойство, по которому их различать, либо попробовать воспольвоваться qmetaobject и ometaproperty.
плохой путь — создать слот который будет принимать указатель на того, кто послал сигнал (как у тебя во втором пути). что бы понять, кто конкретно — либо пронаследовать lineedit и добавить свойство, по которому их различать, либо попробовать воспольвоваться qmetaobject и ometaproperty.а чем этот путь плох?
class myQLineEdit: public QLineEdit {
...
signals:
void mySignal(myQLineEdit *from, ...);
}
использовать как
emit mySignal(this, ...);
а в приёмнике сравнивать этот указатель с известными указателями на myQLineEdit'ы, делать дело, а при отсутствии нужного вываливать исключение
собственно, те, два решения оба видятся мне не очень хорошими.
кстати, указатель нужен исключительно для того, чтобы узнать значение поля, так что если его включать в сигнал, то можно обойтись и включением необходимых переменных.
по слоту на на каждый элемент - это точно неправильно. хотя бы потому, что при добавлении новых полей придётся менять обработчик.
//топикстартер
кстати, указатель нужен исключительно для того, чтобы узнать значение поля, так что если его включать в сигнал, то можно обойтись и включением необходимых переменныхИМХО, в данном случае передача значения поля через параметр --- самый правильный путь
просто это связано с созданием нового класса, о котором designer не знает, а значит придётся его ещё приучивать.
если кто-нибудь добавлял новые елементы, буду рад послушать, как это сделать проще всего
как узнать, кто послал сигнал в слот?воспользоваться sender
(или я не понял вопрос

дададада!
падает в кору, когда добавляешь на формочку..
(gdb) r
Starting program: /usr/local/bin/designer-qt4
warning: Unable to get location for thread creation breakpoint: generic error
[New LWP 100438]
[New Thread 0x8113000 (LWP 100529)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x8113000 (LWP 100527)]
QWidget::mapToGlobal (this=0x0, pos=@0x83b22c0) at qwidget.h:120
120 qwidget.h: No such file or directory.
in qwidget.h
(gdb)
более того простой коннект(connect ) делаю - падает:
(gdb) r
Starting program: /usr/home/igor/projects/vmk-ar5/aa1/build/aa1
warning: Unable to get location for thread creation breakpoint: generic error
[New LWP 100476]
[New Thread 0x8058000 (LWP 100317)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x8058000 (LWP 100317)]
0x2895dbee in QObject::connect (sender=0x3ff00000, signal=0x804daf4 "2returnPressed", receiver=0x8096080,
method=0x804dae8 "1onChange", type=Qt::AutoConnection) at kernel/qobject.cpp:2495
2495 kernel/qobject.cpp: No such file or directory.
in kernel/qobject.cpp
Current language: auto; currently c++
(gdb)
что не так?
qt ставил из портов.
проблема такая:
есть много полей qlineedit, есть слот, который что-то делает, когда в поле нажимают enter, но то, что он делает, завит от того, из какого поля пришёл сигнал.
стандартно — никак
Ложь и наглая провокация. Как раз для целей 'а есть QSignalMapper.
Оставить комментарий
Phoenix
новый вопрос:как узнать, кто послал сигнал в слот?
или как создать свой сигнал наиболее просто, например у тестового поля (QLineEdit)
проблема такая:
есть много полей qlineedit, есть слот, который что-то делает, когда в поле нажимают enter, но то, что он делает, завит от того, из какого поля пришёл сигнал.
например:
есть slot Aslot.
есть два объекта QLineEdit edit1, edit2 (создаются они НЕ вручную!)
у них есть стандартный сигнал
void returnPressed
я вижу 2 пути.
первый:
из Aslot узнать, кто хозяин сигнала, изъять значение поля и дальше уже с ними работать.
(далее первый вопрос выше.)
второй:
сделать slot Bslot(QWidget* sender)
тогда нужно как-то сделать ещё один сигнал.
(далее встаёт второй вопрос.)
если идти по пути расширения QLineEdit, то я так понимаю, придётся окошки прорисовывать руками, что оооочень не хочется
==========
предисловие:
нужно написать простенькую программу с использованием одной библиотеки(уже написана).
что-то работало на винде и в линуксе.
версия qt4.3 или qt4.2
суть проблемы:
у меня стоит freebsd. код пишу в kdevelop. окошки рисую в qdesigner.
во-первых, qdesigner не хочет создавать такие файлы, которые компилятся(приходится всё писать руками без дезайнера)
во-вторых, библиотека не компилится под бсд, поэтому так или иначе нужно переходить куда-то.
что мне не ясно:
1) как прогать под qt под виндой. гугл выдал на удивление мало полезного
2) есть ли в сети qt для линухи. у соседа стоит мандрива. там не компилится нифига (т.е. создаёшь пустой проект в kdevelop, а он не собирается - жалуется на отсутсвие заголовочного файла. и его реально нет. в бсд c qt4.3 этот этап был пройден)
3) что делать с дизайнером в бсд. может я чего не так делаю. какую-нибудь галочку нужно поставить...
короче:
тем, кто смог создать окошко с 2 кнопочками под любой платформой с помощью qt4 просьба отметиться.