Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Home
Help
Recent changes
Contributor Help Pages
Tasks and Tools
Modify a page
Add new content
Page elements
Typographical guidelines
More markup help
Translator Help Pages
Get a Translator Account
Languages represented
Translation Workflow
Translate a Page
Off-line Translation
Translation Statistics
More Help pages
Search
Search
English
Log in
Personal tools
Log in
Export translations
Translate
English
Language statistics
Message group statistics
Export
Tools
Tools
move to sidebar
hide
Actions
Language statistics
Message group statistics
Export
General
Special pages
Printable version
Settings
Group
Category:Phonon
Contribute/List of KDE Modules
Development
Development/FAQs/General FAQ
Development/FAQs/Technical FAQ
Development/KDevelop-PG-Qt Introduction
Development/Tools
Development/Tutorials
Development/Tutorials/CommandLineArguments
Development/Tutorials/Common Programming Mistakes
Development/Tutorials/First program
Development/Tutorials/First program/KDE4
Development/Tutorials/First program/KF5
Development/Tutorials/KDE3/Qt Designer and KDevelop 3.0 for Beginners
Development/Tutorials/Metadata/Nepomuk/TipsAndTricks
Development/Tutorials/Physical Simulation
Development/Tutorials/Qt4 Ruby Tutorial
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 01
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 04
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 05
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 06
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 07
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 08
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 09
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 10
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 11
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 12
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 13
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 14
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 2
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 3
Development/Tutorials/Saving and loading
Development/Tutorials/Setting Up
Development/Tutorials/Using Actions
Development/Tutorials/Using KXmlGuiWindow
Documentation Primer
Edit Markup
Getting Started
Help:Contents
Help:Contribute
How To Convert a UserBase Manual to Docbook
KDE Frameworks
KDE Frameworks/Getting Started
KDE TechBase:About
KDE TechBase:Contributors
KDE TechBase:General disclaimer
KDE TechBase:Privacy policy
Off-line Translation
Projects/Calligra/Plugin Tutorials
Toolbox
Translate a Page
Translation Workflow
Typographical Guidelines
User:Neverendingo
Welcome to KDE TechBase
Language
aa - Afar
ab - Abkhazian
abs - Ambonese Malay
ace - Achinese
acm - Iraqi Arabic
ady - Adyghe
ady-cyrl - Adyghe (Cyrillic script)
aeb - Tunisian Arabic
aeb-arab - Tunisian Arabic (Arabic script)
aeb-latn - Tunisian Arabic (Latin script)
af - Afrikaans
aln - Gheg Albanian
alt - Southern Altai
am - Amharic
ami - Amis
an - Aragonese
ang - Old English
ann - Obolo
anp - Angika
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
atj - Atikamekw
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - South Azerbaijani
ba - Bashkir
ban - Balinese
ban-bali - Balinese (Balinese script)
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba (Latin script)
bcc - Southern Balochi
bci - Baoulé
bcl - Central Bikol
bdr - West Coast Bajau
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bew - Betawi
bg - Bulgarian
bgn - Western Balochi
bh - Bhojpuri
bho - Bhojpuri
bi - Bislama
bjn - Banjar
blk - Pa'O
bm - Bambara
bn - Bangla
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
btm - Batak Mandailing
bto - Iriga Bicolano
bug - Buginese
bxr - Russia Buriat
ca - Catalan
cbk-zam - Chavacano
cdo - Min Dong Chinese
ce - Chechen
ceb - Cebuano
ch - Chamorro
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cps - Capiznon
cpx - Pu-Xian Min
cpx-hans - Pu-Xian Min (Simplified Han script)
cpx-hant - Pu-Xian Min (Traditional Han script)
cpx-latn - Pu-Xian Min (Latin script)
cr - Cree
crh - Crimean Tatar
crh-cyrl - Crimean Tatar (Cyrillic script)
crh-latn - Crimean Tatar (Latin script)
crh-ro - Crimean Tatar (Romania)
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
dag - Dagbani
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
dga - Dagaare
din - Dinka
diq - Zazaki
dsb - Lower Sorbian
dtp - Central Dusun
dty - Doteli
dv - Divehi
dz - Dzongkha
ee - Ewe
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
es-419 - Latin American Spanish
es-formal - Spanish (formal address)
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
fat - Fanti
ff - Fula
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fon - Fon
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fy - Western Frisian
ga - Irish
gaa - Ga
gag - Gagauz
gan - Gan Chinese
gan-hans - Gan (Simplified)
gan-hant - Gan (Traditional)
gcr - Guianan Creole
gd - Scottish Gaelic
gl - Galician
gld - Nanai
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
gor - Gorontalo
got - Gothic
gpe - Ghanaian Pidgin
grc - Ancient Greek
gsw - Alemannic
gu - Gujarati
guc - Wayuu
gur - Frafra
guw - Gun
gv - Manx
ha - Hausa
hak - Hakka Chinese
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
hno - Northern Hindko
ho - Hiri Motu
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
hsn - Xiang Chinese
ht - Haitian Creole
hu - Hungarian
hu-formal - Hungarian (formal address)
hy - Armenian
hyw - Western Armenian
hz - Herero
ia - Interlingua
id - Indonesian
ie - Interlingue
ig - Igbo
igl - Igala
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kai - Karekare
kbd - Kabardian
kbd-cyrl - Kabardian (Cyrillic script)
kbp - Kabiye
kcg - Tyap
kea - Kabuverdianu
kg - Kongo
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kjh - Khakas
kjp - Eastern Pwo
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
ko - Korean
ko-kp - Korean (North Korea)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
krl - Karelian
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ksw - S'gaw Karen
ku - Kurdish
ku-arab - Kurdish (Arabic script)
ku-latn - Kurdish (Latin script)
kum - Kumyk
kus - Kʋsaal
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - Lak
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
lki - Laki
lld - Ladin
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mad - Madurese
mag - Magahi
mai - Maithili
map-bms - Basa Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Māori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mnc - Manchu
mnc-latn - Manchu (Latin script)
mnc-mong - Manchu (Mongolian script)
mni - Manipuri
mnw - Mon
mo - Moldovan
mos - Mossi
mr - Marathi
mrh - Mara
mrj - Western Mari
ms - Malay
ms-arab - Malay (Jawi script)
mt - Maltese
mus - Muscogee
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nāhuatl
nan - Min Nan Chinese
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
nia - Nias
niu - Niuean
nl - Dutch
nl-informal - Dutch (informal address)
nmz - Nawdm
nn - Norwegian Nynorsk
no - Norwegian
nod - Northern Thai
nog - Nogai
nov - Novial
nqo - N’Ko
nrm - Norman
nso - Northern Sotho
nv - Navajo
ny - Nyanja
nyn - Nyankole
nys - Nyungar
oc - Occitan
ojb - Northwestern Ojibwa
olo - Livvi-Karelian
om - Oromo
or - Odia
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pcd - Picard
pcm - Nigerian Pidgin
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Norfuk / Pitkern
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
pwn - Paiwan
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rki - Arakanese
rm - Romansh
rmc - Carpathian Romani
rmy - Vlax Romani
rn - Rundi
ro - Romanian
roa-tara - Tarantino
rsk - Pannonian Rusyn
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rw - Kinyarwanda
ryu - Okinawan
sa - Sanskrit
sah - Yakut
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
se-fi - Northern Sami (Finland)
se-no - Northern Sami (Norway)
se-se - Northern Sami (Sweden)
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
sh-cyrl - Serbo-Croatian (Cyrillic script)
sh-latn - Serbo-Croatian (Latin script)
shi - Tachelhit
shi-latn - Tachelhit (Latin script)
shi-tfng - Tachelhit (Tifinagh script)
shn - Shan
shy - Shawiya
shy-latn - Shawiya (Latin script)
si - Sinhala
simple - Simple English
sjd - Kildin Sami
sje - Pite Sami
sk - Slovak
skr - Saraiki
skr-arab - Saraiki (Arabic script)
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
smn - Inari Sami
sms - Skolt Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - српски (ћирилица)
sr-el - srpski (latinica)
srn - Sranan Tongo
sro - Campidanese Sardinian
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
sty - Siberian Tatar
su - Sundanese
sv - Swedish
sw - Swahili
syl - Sylheti
szl - Silesian
szy - Sakizaya
ta - Tamil
tay - Tayal
tcy - Tulu
tdd - Tai Nuea
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tk - Turkmen
tl - Tagalog
tly - Talysh
tly-cyrl - Talysh (Cyrillic script)
tn - Tswana
to - Tongan
tok - Toki Pona
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
trv - Taroko
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - Uzbek (Cyrillic script)
uz-latn - Uzbek (Latin script)
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vmw - Makhuwa
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
wal - Wolaytta
war - Waray
wls - Wallisian
wo - Wolof
wuu - Wu Chinese
wuu-hans - Wu Chinese (Simplified)
wuu-hant - Wu Chinese (Traditional)
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
xsy - Saisiyat
yi - Yiddish
yo - Yoruba
yrl - Nheengatu
yue - Cantonese
yue-hans - Cantonese (Simplified)
yue-hant - Cantonese (Traditional)
za - Zhuang
zea - Zeelandic
zgh - Standard Moroccan Tamazight
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - Chinese (Macau)
zh-my - Chinese (Malaysia)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
qqq - Message documentation
Format
Export for off-line translation
Export in native format
Export in CSV format
Fetch
{{DISPLAYTITLE:Desenvolvimento/FAQs/FAQ Técnico}}{{Proposed_deletion|Not relevant to external devs, content now at https://community.kde.org/KDE/FAQs/Technical_FAQ}} <languages /> {{improve|O sistema build mudou no KDE4.}} <span id="How_do_I_start_a_new_application?"></span> ==Como faço para iniciar um novo aplicativo?== O jeito mais fácil é usar kdesdk/kapptemplate para gerar o CMakeLists.txt. Ou você pode apenas copiar um CMakeLists.txt de outro aplicativo e instalá-lo em um novo diretório acima do que estão os códigos existentes do KDE. Ou você pode iniciar da velha maneira, do zero. <span id="What_is_plasma,_kpart,_kio,_kdeinit,_..."></span> ==O que é plasma, kpart, kio, kdeinit, ...== Consulte o TechBase, especialmente os [[Special:myLanguage/Development/Architecture|documentos da arquitetura]]. Consulte também o livro do kde. <span id="Do_I_really_need_to_use_kpart?"></span> ==Eu realmente preciso usar kpart?== Bem, você não é obrigado, mas é muito melhor. KPart permite uma poderosa reutilização de código. Tendo em vista o fato de que é simples usar essa tecnologia e que ela é amplamente implementada, é uma pena não usá-la se você puder. <span id="How_do_I_write_a_CMakeLists.txt?"></span> ==Como escrevo um CMakeLists.txt?== Por favor, siga esse [[Special:myLanguage/Development/Tutorials/CMake|tutorial do CMake ]]. <span id="What_targets_are_available_to_make?"></span> ==Que alvos estão disponíveis para make?== *all: o alvo padrão (o que você obtém quando digita "make"). *clean: remove todos os arquivos gerados *distclean: também remove os arquivos gerados por Makefile.cvs Não é muito útil no KDE (veja dist para o conceito "dist" e svn-clean para uma melhor maneira do make realmente remover). *dist: supostamente para fazer tarball do SVN, mas não é suportado muito bem no KDE. Melhor usar kdesdk/scripts/cvs2pack para isso. *force-reedit: executa novamente automake e am_edit no Makefile.am *install: bem, instala tudo *install-strip: instala tudo e descarta os binários (remove símbolos de depuração). *install-exec: somente instala os binários e bibliotecas *install-data: somente instala os arquivos de dados *check: compila os programas de teste (ou seja, aqueles definidos com check_PROGRAMS). É possível até mesmo executar alguns testes durante "make check", veja kdelibs/arts/tests/Makefile.am <span id="I_have_a_checkout_of_SVN,_there_is_no_configure_and_no_Makefile?"></span> ==Tenho um checkout do SVN, não há nenhuma configuração e nenhum Makefile?== Use make -f Makefile.cvs Ele vai executar todas as etapas de geração do Makefile <span id="How_can_I_temporarily_exclude_certain_directories_from_build?"></span> ==Como posso excluir temporariamente determinados diretórios da compilação?== Enquanto hackeia um programa pode ser útil excluir determinados diretórios da compilação que, de outra forma, seriam recompilados, mas que efetivamente não precisam ser. Também, se você fez o checkout do código que não compilou e não tem tempo ou conhecimento para corrigir os erros, você pode querer desativar a compilação do diretório tudo junto. Há dois casos. Diretório e subdiretórios. Para os diretórios você pode simplesmente apagá-los (ou não fazer checkout neles) Se por alguma razão você não quer fazer isso, você pode também definir <code>DO_NOT_COMPILE="someapp"</code> antes de chamar configure, que fará configure ignorar "someapp". Para compilar apenas poucos diretórios, ao invés de usar <code>DO_NOT_COMPILE</code> para excluir a maioria deles, você pode listar em um arquivo chamado ''inst-apps'', no nível superior, os subdiretórios de nível superior que você quer compilar. Para desativar a compilação de qualquer diretório, inclusive subdiretórios, você tem que modificar os arquivos Makefile ou Makefile.am. Makefile.am não é recomendado porque o arquivo está no Subversion do KDE e você pode acidentalmente commitar suas alterações. Então, vamos modificar o Makefile aqui: Abra o Makefile no diretório imediatamente acima do diretório que você deseja excluir, em um editor de texto e procure por uma variável <code>SUBDIRS</code>. Ela, frequentemente, se parecerá um pouco como {{Input|1=SUBDIRS = share core ui . proxy taskmanager taskbar applets extensions data}} Basta remover o diretório que você deseja excluir e salvar seu arquivo. Um novo make vai ignorar o diretório que você acabou de remover. Às vezes você terá que olhar com mais atenção porque a variável SUBDIRS consiste de uma série de outras variáveis: <code>SUBDIRS = $(COMPILE_FIRST) $(TOPSUBDIRS) $(COMPILE_LAST) </code> Aqui você tem que encontrar as variáveis <code>COMPILE_FIRST</code>, <code>TOPSUBDIRS</code> e <code>COMPILE_LAST</code>. Uma destas contém o diretório que você quer excluir. Remova o diretório de onde você encontrá-lo e salve o Makefile novamente. Para desfazer as alterações, você pode gerar novamente o Makefile do zero ou reverter para um backup mais antigo (você fez um, não é? :-). Para criar novamente um Makefile, basta make force-reedit. Você também pode copiar a linha original no arquivo ao editar e fazer um comentário, prefixando um '#' na frente dele. Em seguida, desfazer a mudança é tão fácil como fazer a linha modificada com um comentário e remover o comentário na linha original. <span id="What_are_the_various_compilation_options?"></span> ==Quais são as diferentes opções de compilação?== <code> --enable-debug</code> : Adiciona símbolos de depuração, desabilita otimizações e ativa o log de kdDebug(). code>--disable-debug</code> : O oposto do anterior: habilita otimizações e desativa o log de kdDebug(). <code> --enable-final</code> : Concatena todos os arquivos .cpp em um grande arquivo all_cpp.cpp, e compila de uma só vez, ao invés de compilar cada arquivo .cpp por vez. Isso faz com que a compilação seja muito maior e, muitas vezes, leva a uma melhor otimização do código, mas também requer muito mais memória. E, muitas vezes, resulta em erros de compilação quando os cabeçalhos incluídos por diferentes arquivos de origem colidem um com o outro, ou quando se utiliza funções c estáticas com o mesmo nome em diferentes arquivos de origem. Esta é uma boa coisa a fazer no momento do empacotamento, mas, claro, não para desenvolvedores, já que uma mudança em um arquivo significa recompilar tudo. <code> --disable-fast-perl</code> : Por padrão, usuários KDE usam perl ao invés de sh e sed para converter Makefile.in para Makefile. Esta é uma adição ao autoconf feita por Michael Matz. Você pode usar esta opção para desabilitar isso, mas é muito mais lento. <span id="Which_compile_option_do_you_recommend?"></span> ==Que opção de compilação você recomenda?== Se você é um desenvolvedor, você deveria compilar o Qt e o KDE com --enable-debug. Você então será capaz de depurar seu programa mesmo dentro das chamadas de função do Qt e KDE. Se você é apenas um usuário, você pode ainda usar --enable-debug. O KDE ocupará mais espaço em seu disco rígido mas não deixará seu computador lento. A vantagem é que você rastreia a pilha quando um aplicativo dá erro. Se você pode reportar um erro, vá em bugs.kde.org, verifique se seu erro não existe ainda e, então, submeta-o. Isso nos ajudará a melhorar o KDE. Para Qt, as opções de compilação são explicadas em qt-copy/README.qt-copy. <span id="Tips_to_increase_compilation_speed?"></span> ==Dicas para aumentar a velocidade de compilação?== <div class="mw-translate-fuzzy"> Veja ''--enable-final'' acima : ) . O ''make final'' usa o truque do arquivo tudo-em-um no diretório atual mesmo se --enable-final não foi usado, e ''make no-final'' faz uma compilação normal no diretório atual mesmo se --enable-final foi usado. Inclua seus arquivos moc! Arquivos de cabeçalho que declaram um descendente QObject devem ser executados através do moc para produzir um arquivo .moc . Esse arquivo .moc tem que ser compilado de duas formas possíveis: separadamente ou #incluído no arquivo C++ implementando a classe mencionada acima. O último é mais eficiente em termos de velocidade de compilação. Aliás, kdesdk/scripts/includemocs faz isso automaticamente. Compre mais ram, uma máquina mais rápida e outro processador. Em um bi-PIII 866 MHz com 1GB de RAM, o KDE compila em uma velocidade decente :-))) </div> <span id="There_is_a_STRIP_variable_set_in_the_Makefile_but_it_doesn't_seem_to_be_used?"></span> ==Há uma variável STRIP definida no Makefile mas ela não parece estar sendo usada?== A strip é feita na instalação. Para usá-la, use "make install-strip" em vez de "make install". <span id="What_indentation_should_I_use?"></span> ==Que identação eu devo usar?== Se você está trabalhando em uma aplicação existente, repeite a indetação do author. Se não, você pode usar qualquer identação que lhe for conveniente. <span id="What_is_the_difference_between_i18n_and_I18N_NOOP?"></span> ==Qual é a diferença entre i18n 3 I18N_NOOP?== Se você fizer <code>QString translatedStuff = i18n("foobar");</code> translatedStuff conterá a tradução de "foobar", enquanto que para <code> const char *markedStuff = I18N_NOOP("foobar");</code> <tt>markedStuff</tt> conterá "foobar" literal, mas tradutores saberão que você deseja "foobar" traduzido, então, para que você possa mais tarde fazer <code>QString translatedStuff = i18n(markedStuff);</code> e obter a tradução de "foobar", que não funcionaria sem I18N_NOOP. Então, normalmente você quer apenas usar i18n (), mas nos casos em que é absolutamente necessário passar algo não traduzido, ainda precisa traduzi-lo mais tarde ou, no caso de você ter algo a ser traduzido antes do Kinstance existir, use <code>I18N_NOOP()</code>. <span id="I_get_"virtual_tables_error"?"></span> ==Eu tenho "erro de tabelas virtuais"?== Isso muitas vezes acontece porque os arquivos moc não estão em sincronia com as fontes, ou não linkados em tudo. Verifique se você está executando o moc correto. 'which moc' vai dizer isso. Gere novamente seus arquivos moc (make force-reedit; make clean; make). <span id="I_have_added_Q_OBJECT_to_myClassHeader.h_but_no_moc_files_is_generated?"></span> ==Eu adicionei Q_OBJECT a myClassHeader.h mas nenhum arquivo moc é gerado?== Você precisa de um am_edit para reanalisar seu Makefile.am para gerar o Makefile correto. Se é o primeiro Q_OBJECT que você está usando nesse diretório, você precisará executar novamente o Makefile.cvs ou create_makefile do kdesdk/scripts. Caso contrário, você pode simplesmente executar "make force-reedit". ==To go quicker, I have coded my whole class in a cpp file, how do I get the moc files generated?== Hmm, don't do that, if some of the classes use the Q_OBJECT macro. Maybe METASOURCES=file.cpp might work for moc files though. ==I have developed a kpart (or a plugin). I don't want to install it yet because it is not finished but I need that KDE finds it when I request it using KTrader or KLibLoader. How do I do that?== KDE searches its libraries in $KDEDIR/lib and in the lib directory of all the components of $KDEDIRS (note the additional 'S', this different from $KDEDIR). So, while you are still developing your library and don't want to install it, you can use this trick: : cd to your development directory, the one where your library is built. <br /> : Set up KDEDIRS so that it include your development directory: export KDEDIRS=`pwd`:$KDEDIR <br /> : Create a pseudo lib directory where KDE should find your component: ln -s .libs lib (all the objects and libraries are built in the .libs directory). <br /> : Run kbuildsycoca to inform KDE that it KDEDIRS has changed. Now, KDE should find your library when using KTrader or KLibLoader. ==How can I install additional KDE stuff when I am not root?== If want to install your application privately, configure it with another prefix: for $HOME/kdeprefix, use <code>configure --prefix=$HOME/kdeprefix</code>. Then let KDE know about this prefix: set KDEDIRS to <tt>$HOME/kdeprefix:$KDEDIR</tt>. To make KDE aware of new prefixes, one can also edit /etc/kderc and add {{Input|1=[Directories] prefixes=/the/new/prefix}} but this doesn't answer this specific question ;-) Make sure to run "kbuildsycoca" after setting the new KDEDIRS. ==My kpart lib is not listed when I request it with KTrader== The mimetype database must be rebuilt when you install new services (such as applications or parts). In theory this happens by itself (kded is watching those directories), but in doubt, run "kbuildsycoca". The best way to debug trader-related problems is to use <code>ktradertest: cd kdelibs/kio/tests; make ktradertest</code>, then run <code>./ktradertest</code> to see how to use it. ==I changed something in kdelibs, installed the new lib, but new KDE apps don't seem to use it?== The solution is simple: start new apps from a command line, then they will use the new lib. The reason is that applications started by other KDE applications (kicker, minicli, konqueror, etc.) are started via kdeinit, which loads the libs when KDE starts. So the "old" version of the libs keep being used. But if you want kdeinit to start using the new libs, simply restart it. This is done by typing kdeinit in a terminal. This is necessary if you can't start things from the command line - e.g. for a kioslave. If you change something in kio, you need to restart kdeinit and kill the running kioslave, so that a new one is started. ==I'm developing both a KPart and a standalone application, how do I avoid duplicated code?== Apps are often tempted to link to their part because they of course have much functionality in common. However this is wrong for the reasons below. A lib is something you link to, a module is something you dlopen. You can't dlopen a lib ; you can't link to a module. A lib has a version number and is installed in $libdir (e.g. $KDEDIR/lib) a module doesn't have a version number (in its name), it's more like a binary (we don't have konqueror-1.14.23 either :), and is installed into kde_moduledir (e.g. $KDEDIR/lib/kde3) (which means it's not in the search path for ld.so, so this breaks on systems without -rpath). If you didn't understand the above, don't worry. The point is: you should NOT make your application link to your (or any other) KPart, nor any other kind of dlopened module. The solutions: Let the app dlopen the part. This is what KOffice does. However this limits the app to the very limited ReadOnlyPart/ReadWritePart API. Keep in mind that you can't call a non-virtual method whose implementation you don't link to. The solution is to define a ReadWritePart-derived class (like we have in koffice: KoDocument), with new virtual methods. Either this derived class has code (and you need a lib shared by the app and the part, see point 2 below), or an abstract interface (header file only) is enough. You can also use known interfaces to child objects of the part instead of changing the base class of the part itself - this is the solution used by e.g. KParts::BrowserExtension. Define a common library with the common classes and let both the part and the app use it. That library can be noinst_ or lib_, both work. In the first case the compiled object code is duplicated, in the second case a real versioned lib will be installed. The idea here is that the part itself is not available to the app, but instead the part is a very thin wrapper around the same classes as the app uses. Only KParts-specific stuff remains in the part. ==What is the best way to launch another app?== In KDE there are several ways to start other programs from within your application. Here is a short summary of your options with reasons why you should or should not use them. ===fork + exec=== You never want to use this unless you have a very good reason why it is impossible to use KProcess. ===KProcess=== You want to use this if you need to start a new process which needs to be a child of your process, e.g. because you want to catch stdout/stderr or need to send it data via stdin. You should never use this to start other KDE applications unless your application is called kgdb :-) ===startServiceByDesktopPath=== Preferred way to launch desktop (KDE/Gnome/X) applications or KDE services. The application/service must have a .desktop file. It will make use of KDEinit for increased startup performance and lower memory usage. These benefits only apply to applications available as KDEinit loadable module (KLM) ===KRun=== Generic way to open documents/applications/shell commands. Uses startServiceBy.... where applicable. Offers the additional benefit of startup-notification.<br /> [http://api.kde.org/4.x-api/kdelibs-apidocs/kio/html/classKRun.html KRun] can start any application, from the binary or the desktop file, it will determine the mimetype of a file before running the preferred handler for it, and it can also start shell commands. This makes KRun the recommended way to run another program in KDE. === KToolInvocation::invokeBrowser === [http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/classKToolInvocation.html KToolInvocation::invokeBrowser] launches a web browser. The difference with using the more generic KRun on the webpage URL is that KRun has to determine the mimetype of the URL first (which, for HTTP, involves starting a download to read the headers), so if you know that the URL is an HTML webpage, use invokeBrowser, it will be faster. More details: the problem with KRun for webpages is that it delays the appearance of the browser window, and if the user's preferred browser is a non-kde application like firefox then it has to start a second download while konqueror which can reuse the kioslave started by KRun. On the other hand if the URL might be an image or anything else than html, then KRun is the right solution, so that the right application is started. ==How do I create and submit a patch to KDE?== You have spotted a bug and you want to write the code to fix it. Or you want to code a specific feature. Sending a patch is very appreciated by developers. A tutorial is available but here is a description of how you should proceed: * Get the latest KDE using SVN to check that the code you want to write has not been added yet. * Check the bug database to see if your bug is not worked on. * Get in contact with the author. His/her name is in the about box or in the source header. If the project has a mailing-list, browse the archives to see if your bug/feature has not been the subject of any discussion. If you can't find any mailing lists or author, simply write to kde-devel. * Post a message explaining your intentions. It is important to inform the author(s) about what you are planning because somebody might already be working on your feature, or a better design could be proposed by the author, or he could give you some good advice. * Next step is to code your feature. It is usually a good idea to keep an original at hand and to work on a copy. This allow to check the behaviour of both versions of the code. Respect the author's indentation and naming scheme, code carefully, think about side-effects and test everything many times. * Using the latest KDE code, make a diff using either svn diff or a diff -uNp original-dir new-dir. Don't send reversed patch. The first argument of diff should be the old directory and the second the new directory. * Send a mail to the author/mailing-list with your patch as attachment (don't forget to attach it :-) ). * People usually have some remarks on your work and you must work further on your patch to improve it. It is common to see three or four submission before acceptation. Ok, you have done it, your code has been included in KDE. You are now fully part of the KDE project. Thanx a lot. ==How do I make my application Xinerama and multi-head safe?== Never make assumptions about the geometry of the "desktop" or the arrangement of the screens. Make use of the following functions from kglobalsettings.h: <syntaxhighlight lang="cpp-qt"> static QRect KGlobalSettings::splashScreenDesktopGeometry(); static QRect KGlobalSettings::desktopGeometry(const QPoint& point); static QRect KGlobalSettings::desktopGeometry(QWidget *w); </syntaxhighlight> Use splashScreenDesktopGeometry() to determine the geometry of the desktop when you want to display an application splash screen. Use desktopGeometry() to determine the geometry of the desktop with respect to a given point on the desktop, or with respect to a given widget. Do not use the Qt class QDesktopWidget to determine these values yourself. The KDE functions take the user's settings into account, something the Qt functions cannot do. It is ideal to try to avoid using the desktop geometry altogether. Your application will be much more standards compliant if you let the window manager place your windows for you. When this is not possible, you have the aforementioned functions available. Please beware that the geometry that is returned from these functions may not start at (0,0)! Do your math correctly! One other caution: Both KWin and the NETWM specification have severe difficulties handling struts with Xinerama or "merged" displays. This can result in dead areas on the screen, for instance if kicker does not span a whole edge. There is not much that can be done about this, and you should try to avoid hacks to circumvent this at this time. We hope to find a proper solution for this soon. ==I get an error about KDE not finding UIC plugins, but I know they're installed. What's wrong?== This is almost certainly an installation problem, not a KDE code problem. A number of problems can lead to this, but most likely you have more than one version of Qt laying around and the configure script is calling a different one than KDE is using. Another thing that may help is to rebuild and reinstall your kdewidgets.so file, which is located in the kdelibs/kdewidgets directory. Note that if you *do* have multiple versions of Qt, this may compile against the wrong one. This problem creeps up on various mailing lists occasionally, so looking at the archives on lists.kde.org may be helpful. ==I put some functions in anonymous namespace and someone reverted it and made those functions static, why?== Symbols defined in a C++ anonymous namespace do NOT have internal linkage. Anonymous namespaces only give an unique name for that translation unit and that is it; they don't change the linkage of the symbol at all. Linkage isn't changed on those because the second phase of two-phase name lookup ignores functions with internal linkages. Also, entities with internal linkage cannot be used as template arguments. ==Can I delete a NULL pointer?== Yes. Calling delete on a null pointer is a noop in C++. Having "if (ptr) delete ptr;" is redundant. Doing <code>ptr = 0;</code> after a delete is a good idea, especially if the delete can be called on it from a different code path. ==My locally installed application doesn't run, but KDEDIRS is set correctly, what's going on?== If you're running a 64 bits system, your libraries might have been compiled with the -DLIB_SUFFIX=64 option given to cmake. If your application wasn't compiled with that option, it'll get its modules installed into $prefix/lib/kde4, not $prefix/lib64/kde4 -- and then it will not be found. Easy solutions: a symlink to lib64 or compile your code with -DLIB_SUFFIX=64, too. [[Category:FAQs]]
Toggle limited content width