From 7f14720666799201f4e493c7751fd42e3601dc1a Mon Sep 17 00:00:00 2001 From: "royqh1979@gmail.com" Date: Fri, 17 Sep 2021 21:33:19 +0800 Subject: [PATCH] * update chinese translations * make clean for project done --- RedPandaIDE/RedPandaIDE_zh_CN.qm | Bin 59156 -> 74805 bytes RedPandaIDE/RedPandaIDE_zh_CN.ts | 1779 +++++++++++++---- RedPandaIDE/compiler/compilermanager.cpp | 28 + RedPandaIDE/compiler/compilermanager.h | 1 + RedPandaIDE/compiler/projectcompiler.cpp | 16 +- RedPandaIDE/compiler/projectcompiler.h | 5 + RedPandaIDE/mainwindow.cpp | 71 +- RedPandaIDE/mainwindow.h | 5 + .../projectdirectorieswidget.cpp | 6 +- .../projectprecompilewidget.cpp | 2 +- 10 files changed, 1499 insertions(+), 414 deletions(-) diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.qm b/RedPandaIDE/RedPandaIDE_zh_CN.qm index 3c48ca6422b3ca1100be7469967b75ae2653fb8b..02f472fb446f168a7235fc4508188993afecaec7 100644 GIT binary patch delta 20070 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 delta 6368 zcmYkAd0b7~`^TSs&faI*`<#PR$V|pWC^Cx-C1XNJs?$I+hU)52C{v{qO@uU2gd<4< zjp7on;o`dCqU*|V&DZ?>^xePTeSQDv^*-%=)>_YchR=G|DX3)=>ZEb)7Mb@TVhuza z*MJG&9&i^}4(6I60J2SHY1fN8Hc)8XG8L>+gC?DCh$?qfw-cNW=yvq-xS zB8Ti2IqbB^;e{ecPZc>cLgd8^;uP?7;0)sWITA6B|Ho_prJjN##0RAxM3!{}_Y*Cf zP251(FL_MdD1@)Pg18BARP#LICcPuthWEa3P~X-fw`+)7x{qkN1##Q*iDI!}QZ?S+ z6}j`F$ozETvN4};5OG!cdZOLWNj}(=$W%gdH(2O5lhh42iS~9P%fa46?!ja=_6frE zL?p9MWUwps*&jf3DUABOYfrSOBaQPvi5-3sY1*GAtg$C5i=hcy5X~tbG-2BeqLf`U z(KeN6;8U6yt*;`wFpws0QxYBgL=!WlL`4nc)Z-vgx-B``?IK!pmYlr3h|Y236b{4o zc#u<3AyOxqoT?uY{cJ&#lJVZ+p~yb{MMk=dOztHzOHMA5N}|mt$i;ReQI;pU=yjn) zW&_BjiT&L~4*!X!x|hK9g(A%oXa^9OaiXXsDN**{lrRVeSVU9mcn!u^Q`!m? zP(%;PT{46y`Vtkav>|H0h>C{XA@aCIWsxQ*xKmWwAsL4KqNnOFM~DWGq`E&5!-U;* zWB5v<0gZHf-yBp`AG&kL09RSjU7;FD6-xIUi!g8p)h~tNdrs5irO<|>U8!OAQKEpm z^v>=(^umjwLGR(w$BewE4^ihLrkk@jQTK<;2-lr>Z^?|C{fNj*FJ;F2!SW!MnG(93 zXzW>$)eo5^I}Q^$&SBQQ=ufnLHIurz4m)L-{avpkDbF%l2Vm$$2PS9euS7Eon2I|= zM5Ep?wX>0|9X5+Be9v5E#t^mc$9z!^AnG)j`Rax0Z_`J@-2aP6pKC8+@3qE@)eqqu=>7aSWX2|?J0@t^cd(=v1C@h0offd@&5V} zDtJz!>vV|d@KTA++Y+9OlKAg{L6d7FOElI*>Y0)?<cjoJh(08f-x8DfygJiTZawBW3dw zkd@I=?HMUiU81yaL?ux#6KOwd{BLP1wOJmB_k~iM)p;;*gmlB#zE#J0QC z=|UIiL%wwG!kI*A@1=7K0*FqMbl&_8L^U6!^L-KXn!O-4l9nme1y`f&_e*t8^!7-e z4bml+aG{&EG&JiOSRkVJ(g179p0EQsd~R0e?$R2ZkfY;nEU2xb*a9X^p-! z(Ury0^WhjD6E3~haRyxLBfXh@0_8bc`t;O&q86Fb=Y#Gdmr|tf&y0b=pQRtS))V;` zOMmE3AU5GaWHFIH-PAJ7~AIDKqA#`w%v*L$c@%)Co|;Ap|9+~ zf!KM+39Q}5FGPw-tUZTN9cjV3%aN?%#jLwKcE0y8>%QnSq_#gh|G;e++Ku%bRDkl{ z#4aq{p2B9)``0 zfkQ%n1z!_|DZn?#!LV9Wt+NJyfD72%SP2*hA|=+9gECZ4I4B46 zK?V2#R6?1XgDTL0&9lmc1AW;1$XSS3FZNi&2pkbXY%%Xelo`=P<$S7tXd*XYm zec1*Ncwn&)`}8S1 z1g6;{*Ozl_o-35}6UXgIAllNI<4QF|XHIdd2zbnTKc~utYqvOaeBvXF-^*!ynyRh` z*UZWt&C?gI`QtJ)NOMJwEa&=7!+MABbGAuHv8}G0t-f+0sw|b8lsy?|%PY>k9ggqB zBbd^9z98$m8=>mo zUe@akWJM^DSx+lRmGqPiFGjXY6J=wz^o63Y5*hPUHeTk1wnA?soAWgduFjXuWlT|a z-(?;R(2L>2WM1vz@^fA??>r=%gQLjG%d&tV#O_3yEU>u;&Zc77QtKi}yF?aR-UVg0 zMHVKL;(4RU3Nu;k11IFnBw5^qWVEm^Wr>=$=xhFzrA)^-edb|VT6h^0cZDp|X$W$m zL6+Bg4w3yr+0iQO%=1qWmM-i7dV{lM$KzKJ@$RydZiw-MLRqOhT>kT9S;ZwNb(~Cg zrNvaD6=AY#&5=tXcCufRzTmb*)+X5wSFZY!`BAWVK?rYWtWo;o37!Cva_{o<{foEnNmIt{XMs=9Wml+SE{>Qn> z*BLvY|M(~mf6(+IRv!Lr1kvbc@?BShaYVSuck}Nc>F?x8o^bsdz5GA}bfD~|JpCSW zpwLHt%o90srk%WC=op+ath}U5OH|obUUI{pXx=;dS&Jf~44wS(Yj~#pL-~{PhX`pD zsK{GmG(*CGOCG!>a z-tUFdyaiDML1f$H_9PDV6a=T za#RIEs%@uqv^)gE5BE?yjb4WC`7fpO+6ZLz6{U+Gk|o$uIoTA+m1v@zGW-=5oM713 z!c4z+y3+G3A~S(e`m{oBjWJWM&RmF)3d-o;vEjpGmD^WchaD?L#t%~NT!ZJc>y^p= ztzoZGnPP=$H?LHt$4YS&w3)0#g2& zU_kTTR{8X~2Hir9^2Gu;PW@8($-O0XYmthKxK%{#S1F2SK!CTZn#B|#MQ*9Azs^Bs zII2eNih<)DR1T+)qFAa)<^16-ly;A5_6Zo$YL&`o7$!>Jrt(>)L#`@Bu3fJ3xq2B@ z?IbcJRpdb*)#4M=;kgGQtDRNLj`zahI!zVf7KC;~tJ-yF12$L*A|R;>FcNeD^&9aa zUUk43J6XD1mA(SW?{Y|$el`OkNLJ-pKEh5zRL44?7#7BY4&VjV=~p+Xrh!5R?7 z@zZBj$#z#9A&%fGxSUjFmsS$Z*ruwO;RBZsQe9k+|A)A%F8|0u%AZkP>()OLhh4Pl z#ib|+WP$3_Z`k3WSE_GO_+qn*s_%KoiB2aCdQ&s~sAjy$_UriF;b-2|AHN}#o#9Pi zz(HQ=y!llQeUc4ty_Q2z1!u4h7(5YcnL@_XeKm^hF>U=D{3Q}PGz z38>L`eD<#PxMr>6vv*I1z?bt!)>=YE%J`#hDd?|e@uwY-A+aa=4U2>wAnB66yVZy1V*oG#`YE4^_djN==hz%y1p{EO{az)-@!I)#O|+wy-` z!qB`H{OhYt2AT1nOCSPHz5=rl9yqjKkow_!+I&H?HIccEU}~aoge4Y& z>E-5d$pgV`3G^@dccInd5MfgcTw78k zB#y%OY2MD*< zH90~qvekK!YlaDpc~5X&92Gv^mInnarmAOqV&Sv#YEKyhRf!N;bwKU^-(Pb&sRM3T!LU~% zi{`2WD?39r!_w)G6V#2nxHKy@=HKtO>k`c~VAdR^D+$579-lSqb?H(`&XQU5Bnd z)$FXtyqgYa_P8EJ^;&B7y_LXYmo(Y>z2QhAYfa8$SCsu;&G9l=?$TRRc>X2sDEBpI ziwe+;T+;mZ91Hb%qN%S(OnXObKFBsfw`OQQUO>)t-L3hyNQ$bp)O`0qY|Soe1wF=P zCuqCwhhg*fX>D)8ptPx4+j@Lo6QLdUas!%`9Ibv_whsE)MLXrw1yrZ2cDfbx%BexS zAgzvQ$uey~1Pru2uU+;8Mc_O|8(QFmhP1mjPJ;JA8QS>HKS3BTh^%<7O>V>jwF9)N ziePk4|7g<<2hl^+X)~gsbHOjPIp>Tp$W~hvaUVxtjf=Lp4;G9|5?Q=jdv8Gygsxos zYzTH(SFdfn4_VmIUHkrZCi=Tj?Wf}w$m$sFmwBzxjy2bQ_rlJG=Afjn)EZ0L+L{_q z46;{tQ0X4{%af9jNH)kFG-&u!1qZDPSQV)Av9vL=qX%~~Sah~Gbo1KSyHzOf5gU6o zdQ$9fp}cF~={c^N`8|Uo`$_&CI>^;u*KtK~P>{i_%K(fq8(^k;5O}lcyZ<}(e@1lq z{}H+s9ha?G>aAP3()i3Pn=@!XnHn7Z+8B2Fk84KG&tC_?j3Z_-l490%~PFWe;63YyallmKWCubNgri?ZCrj9iHk=n!HwWpu) z^PY1O!>Dw@_%REF3QhJ7d83AzZ0umb!%4{Y+jld yMsiFqY2hylrd*YH*M#X0wPhA2UT(?EPV_Wo!V@Q%G4_Q BacktraceModel - + Function 函数 - + Filename 文件名 - + Line @@ -45,17 +45,17 @@ BreakpointModel - + Filename 文件名 - + Line - + Condition 条件 @@ -100,62 +100,62 @@ Compiler - + Clean before rebuild failed. 重编译前的清理准备工作失败! - + Compile Result: 编译结果: - + - Errors: %1 - 错误数: %1 - + - Warnings: %1 - 警告数: %1 - + - Output Filename: %1 - 输出文件名: %1 - + - Output Size: %1 - 输出文件大小: %1 - + - Compilation Time: %1 secs - 编译时间: %1 秒 - + [Error] [错误] - + [Warning] [警告] - + [Info] [信息] - + [Note] [说明] - + The compiler process for '%1' failed to start. 无法启动编译器进程'%1'。 @@ -164,27 +164,27 @@ 无法启动编译进程。 - + The compiler process crashed after starting successfully. 编译进程启动后崩溃。 - + The last waitFor...() function timed out. waitFor()函数等待超时。 - + An error occurred when attempting to write to the compiler process. 在向编译进程输入内容时出错。 - + An error occurred when attempting to read from the compiler process. 在从编译进程读取内容时出错。 - + An unknown error occurred. 发生了未知错误。 @@ -220,20 +220,29 @@ CompilerManager - - + + + + + No compiler set 无编译器设置 - - + + + + + No compiler set is configured. 没有配置编译器设置。 - - + + + + + Can't start debugging. 无法启动调试器 @@ -451,6 +460,24 @@ Are you really want to continue? 新名称 + + CustomMakefileInfoDialog + + + Information for custom makefile + 关于自定义Makefile + + + + Ok + 确定 + + + + <html><head/><body><p>Red Panda Dev-C++'s Makefile has two important targets:</p><p>- all (which builds the executable)</p><p>- clean (which cleans up object files)</p><p><br/>&quot;all&quot; depends on 2 targets: all-before and all-after. All-before</p><p>gets called before the compilation process, and all-after gets</p><p>called after the compilation process.</p><p><br/>&quot;clean&quot; depends on the target clean-custom, which gets called</p><p>before the cleaning process.<br/></p><p>You can change the Makefile's behavior by defining the targets</p><p>that &quot;all&quot; and &quot;clean&quot; depend on.</p></body></html> + <html><head/><body><p>小熊猫Dev-C++的Makefile包括两个重要的目标(target):</p><p>- all (用来构建可执行文件)</p><p>- clean (用来清理构建文件)</p><p><br/>&quot;all&quot; 依赖于2个目标:all-before 和all-after. </p><p>构建前会调用all-before目标,构建后会调用all-after目标。</p><p><br/>&quot;clean&quot; 依赖于目标clean-custom, 它在执行清理前被调用。<br/></p><p>你可以通过自定义这些目标来改变构建行为。</p></body></html> + + DebugGeneralWidget @@ -546,28 +573,28 @@ Are you really want to continue? 找不到调试器程序"%1" - - + + Execute to evaluate 执行以求值 - + Not found in current context 不在当前语境中 - + Compile 编译 - + Source file is more recent than executable. 源文件比程序文件新。 - + Recompile? 重新编译? @@ -575,84 +602,84 @@ Are you really want to continue? Editor + untitled - 无标题 + 无标题 - untitled%1 - 无标题%1 + 无标题%1 Fail 失败 - - - - - - - + + + + + + + Error 错误 - + File %1 is not writable! 无法写入文件"%1" - + Save As 另存为 - + The text to be copied exceeds count limit! 要复制的内容超过了行数限制! - + The text to be copied exceeds character limit! 要复制的内容超过了字符数限制! - + The text to be cut exceeds count limit! 要剪切的内容超过了行数限制! - + The text to be cut exceeds character limit! 要剪切的内容超过了字符数限制! - - - + + + Ctrl+click for more info Ctrl+单击以获取更多信息 - - + + Symbol '%1' not found! 未找到符号'%1'! - + Break point condition 断点条件 - + Enter the condition of the breakpoint: 输入当前断点的生效条件: - + Readonly 只读 @@ -1272,34 +1299,33 @@ Are you really want to continue? ExecutableRunner - + The runner process '%1' failed to start. The runner process failed to start. - 无法启动程序运行进程'%1'。 + 无法启动程序运行进程'%1'。 The runner process crashed after starting successfully. 程序运行进程启动后崩溃。 - + The last waitFor...() function timed out. waitFor()函数等待超时。 - + An error occurred when attempting to write to the runner process. 在向程序运行进程写入内容时出错。 - + An error occurred when attempting to read from the runner process. 在从程序运行进程读取内容时出错。 - An unknown error occurred. - 发生了未知错误。 + 发生了未知错误。 @@ -1323,50 +1349,50 @@ Are you really want to continue? FileCompiler - + Compiling single file... 编译单个文件... - + - Filename: %1 - 文件名: %1 - + - Compiler Set Name: %1 - 编译器配置: %1 - - + + Can't delete the old executable file "%1". 无法删除旧的可执行文件"%1". - + Can't find the compiler for file %1 Can't the compiler for file %1 找不到适合文件%1的编译器 - + The Compiler '%1' doesn't exists! 编译器程序"%1"不存在! - + Processing %1 source file: 正在处理%1源程序文件: - + %1 Compiler: %2 %1编译器: %2 - + Command: %1 %2 命令: %1 %2 @@ -1439,24 +1465,20 @@ Are you really want to continue? 确定 - bytes - 字节 + 字节 - KB - KB + KB - MB - MB + MB - GB - GB + GB @@ -2033,22 +2055,45 @@ Are you really want to continue? IssuesModel - + Filename 文件名 - + Line - + Col - + + Description + 描述 + + + + IssuesTable + + + Filename + 文件名 + + + + Line + + + + + Col + + + + Description 描述 @@ -2061,667 +2106,725 @@ Are you really want to continue? 小熊猫C++ - - + + Issues 编译器 - + Compile Log 编译日志 - + File 文件 - + Tools 工具 - - + + Run 运行 - + Edit 编辑 + Project 项目 - + Watch 监视 - + Structure 结构 - + Files 文件 - Resource - 资源 + 资源 - - - + + + Debug 调试 - + Evaluate: 求值 - + Debug Console 调试主控台 - + Call Stack 调用栈 - + Breakpoints 断点 - + Locals 本地变量 - - + + Search 查找 - + History: 历史: - + Search Again 重新查找 - + Replace with: 替换为: - + Replace 替换 - - + Close 关闭 - + Execute 运行 - + Code 代码 - + Window 窗口 - - - - + + + + toolBar 工具栏 - + toolBar_2 工具栏2 - + New 新建 - + Ctrl+N Ctrl+N - + Open... 打开... - + Ctrl+O Ctrl+O - + Save 保存 - + Ctrl+S Ctrl+S - + Save As... 另存为... - + Save As 另存为 - + Save All 全部保存 - + Ctrl+Shift+S Ctrl+Shift+S - + Options 选项 - - - - - - + + + + + + Compile 编译 - + F9 F9 - + F10 F10 - + Undo 恢复 - + Ctrl+Z Ctrl+Z - + Redo 重做 - + Ctrl+Y Ctrl+Y - + Cut 剪切 - + Ctrl+X Ctrl+X - + + Copy 复制 - + Ctrl+C Ctrl+C - + Paste 粘贴 - + Ctrl+V Ctrl+V - + Select All 选择全部 - + Ctrl+A Ctrl+A - + Indent 缩进 - + UnIndent 取消缩进 - + Toggle Comment 切换注释 - + Ctrl+/ Ctrl+/ - + Collapse All 全部收起 - + Uncollapse All 全部展开 - + Encode in ANSI 使用ANSI编码 - + Encode in UTF-8 使用UTF-8编码 - + Auto Detect 自动检测 - + Convert to ANSI 转换为ANSI编码 - + Convert to UTF-8 转换为UTF-8编码 - - + + Compile & Run 编译运行 - + F11 F11 - - + + Rebuild All 全部重编译 - + F12 F12 - + Stop Execution 停止执行 - + F6 F6 - + F5 F5 - + Step Over 单步跳过 - + F7 F7 - + Step Into 单步进入 - + + + New Source File + 新建源代码文件 + + + F8 F8 - + Step Out 单步跳出 - + Ctrl+F8 Ctrl+F8 - + Run To Cursor 执行到光标处 - + Ctrl+F5 Ctrl+F5 - + Continue 继续执行 - + F4 F4 - + Add Watch... 添加监视 - + View CPU Window... 打开CPU信息窗口... - + Exit 退出 - + Find... 查找... - + Ctrl+F Ctrl+F - + Find in Files... 在文件中查找... - + Ctrl+Shift+F Ctrl+Shift+F - + Replace... 替换 - + Ctrl+R Ctrl+R - + Find Next 查找下一个 - + F3 F3 - + Find Previous 查找前一个 - + Shift+F3 Shift+F3 - + Remove Watch 删除监视 - + Remove All 清除全部监视 - + Modify Watch... 修改监视值 - + Reformat Code 对代码重新排版 - + Ctrl+Shift+A Ctrl+Shift+A - + Go back 前一次编辑位置 - + Ctrl+Alt+Left Ctrl+Alt+Left - + Forward 后一次编辑位置 - + Ctrl+Alt+Right Ctrl+Alt+Right - + Ctrl+W Ctrl+W - + Close All 全部关闭 - + Ctrl+Shift+W Ctrl+Shift+W - + Maximize Editor 最大化编辑器 - + Ctrl+F11 Ctrl+F11 - + Next 下一窗口 - + Ctrl+Tab Ctrl+Tab - + Previous 前一窗口 - + Ctrl+Shift+Tab Ctrl+Shift+Tab - + Toggle breakpoint 切换断点 - + Ctrl+F4 Ctrl+F4 - - + + Clear all breakpoints 删除所有断点 - + Breakpoint property... 设置断点条件... - + Goto Declaration 跳转到声明处 - + Goto Definition 跳转到定义处 - + Find references 查找符号的引用 - + Open containing folder 打开所在的文件夹 - + Ctrl+B Ctrl+B - + Open a terminal here 打开命令行窗口 - + File Properties... 文件属性... - + + Close Project + 关闭项目 + + + + Project options + 项目属性 + + + + New Project... + 新建项目... + + + + New File + 新建项目文件 + + + + Add to project... + 添加到项目... + + + + Remove from project + 从项目删除 + + + + View Makefile + 查看Makefile + + + + Clean + 清理构建文件 + + + File Encoding 文件编码 - + Recent Files 文件历史 - - + + + + + + Debugging 正在调试 - - + + + + + + Running 正在运行 - - + + + + + + Compiling 正在编译 @@ -2730,181 +2833,985 @@ Are you really want to continue? 行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5 - + Line:%1 Col:%2 Selected:%3 Lines:%4 Length:%5 行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5 - + Read Only 只读 - + Insert 插入 - + Overwrite 覆写 - - + + Close project + 关闭项目 + + + + Are you sure you want to close %1? + 你确定要关闭'%1'吗? + + + + Confirm 确认 - - - + + + Source file is not compiled. 源文件尚未编译。 - - + + Compile now? 现在编译? - - + + Source file is more recent than executable. 源文件比可执行程序新。 - + Recompile now? 重新编译? - + No compiler set 无编译器设置 - + No compiler set is configured. 没有配置编译器设置。 - + Can't start debugging. 无法启动调试器 - + Enable debugging 启用调试参数 - + You have not enabled debugging info (-g3) and/or stripped it from the executable (-s) in Compiler Options.<BR /><BR />Do you want to correct this now? 当前编译设置中未启用调试选项(-g3),或启用了信息剥除选项(-s)<br /><br/>是否纠正这一问题? - + Recompile? 重新编译? - + + Copy all + 全部复制 + + + + Clear + 清除 + + + + Remove this search + 清除这次搜索 + + + + Clear all searches + 删除所有搜索 + + + + Breakpoint condition... + 断点条件... + + + + Break point condition + 断点条件 + + + + Enter the condition of the breakpoint: + 输入当前断点的生效条件: + + + + Remove all breakpoints + 清除所有断点 + + + %1 files autosaved 已自动保存%1个文件 - + + Save project + 保存项目 + + + + The project '%1' has modifications. + 项目'%1'有改动。 + + + + Do you want to save it? + 需要保存吗? + + + Do you really want to clear all breakpoints in this file? 您真的要清除该文件的所有断点吗? - - - - - - - - + + New project + 新建项目 + + + + Close %1 and start new project? + 关闭'%1'以打开新项目? + + + + Folder not exist + 文件夹不存在 + + + + Folder '%1' doesn't exist. Create it now? + 文件夹'%1'不存在。是否创建? + + + + Can't create folder + 无法创建文件夹 + + + + Failed to create folder '%1'. + 创建文件夹'%1'失败。 + + + + Save new project as + + + + + Red panda Dev-C++ project file (*.dev) + 小熊猫Dev-C++项目文件 (*.dev) + + + + New project fail + 新建项目失败 + + + + Can't assign project template + 无法使用模板创建项目 + + + + Add to project + 添加到项目 + + + + + + + + + + Error 错误 - + + Recent Projects + 项目历史 + + + File '%1' was changed. 磁盘文件'%1'已被修改。 - + Reload its content from disk? 是否重新读取它的内容? - + File '%1' was removed. 磁盘文件'%1'已被删除。 - + Keep it open? 是否保持它在小熊猫C++中打开的编辑窗口? - + Open 打开 - + Compile Failed 编译失败 - + Run Failed 运行失败 - - + + Confirm Convertion 确认转换 - - + + The editing file will be saved using %1 encoding. <br />This operation can't be reverted. <br />Are you sure to continue? 当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗? - + New Watch Expression 新监视表达式 - + Enter Watch Expression (it is recommended to use 'this->' for class members): 输入监视表达式 - + Parsing file %1 of %2: "%3" (%1/%2)正在解析文件"%3" - - + + Done parsing %1 files in %2 seconds 完成%1个文件的解析,用时%2秒 - + (%1 files per second) (每秒%1个文件) + + NewProjectDialog + + + New Project + 新建项目 + + + + Make default language + 设为缺省语言 + + + + C Project + C语言项目 + + + + C++ Project + C++语言项目 + + + + Name: + 项目名称: + + + + Location: + 文件夹: + + + + ... + ... + + + + Project%1 + 项目%1 + + + + + Default + 缺省 + + + + Project + + + File Not Found + 未找到文件 + + + + Project file '%1' can't be found! + 找不到项目文件'%1'! + + + + untitled + 无标题 + + + + Can't save file + 无法保存文件 + + + + Can't save file '%1' + 无法保存文件'%1'. + + + + File Exists + 文件已存在 + + + + File '%1' is already in the project + 文件'%1'已在项目中 + + + + Project Updated + 项目已升级 + + + + Your project was succesfully updated to a newer file format! + 已成功将项目升级到新的格式 + + + + If something has gone wrong, we kept a backup-file: '%1'... + 旧项目文件备份在'%1'。 + + + + Settings need update + 设置需要更新 + + + + The compiler settings format of Dev-C++ has changed. + Dev-C++的编译器设置格式已发生改变。 + + + + Please update your settings at Project >> Project Options >> Compiler and save your project. + 请在项目 >> 项目属性 >> 编译器设置中修改您的设置并保存您的项目 + + + + Compiler not found + 未找到编译器 + + + + The compiler set you have selected for this project, no longer exists. + 您为该项目设置的编译器不存在。 + + + + It will be substituted by the global compiler set. + 它将会被全局编译器设置代替。 + + + + Developed using the Red Panda Dev-C++ IDE + 使用小熊猫Dev-C++编辑器开发 + + + + ProjectCompileParamatersWidget + + + Form + 表单 + + + + Add encoding options to compiler + 编译时加入文件编码参数 + + + + Statically link libraries + 静态链接所有库 + + + + Additional build options: + 附加构建参数: + + + + C Compiler + C编译器 + + + + C++ Compiler + C++编译器 + + + + Linker + 链接器 + + + + ProjectCompiler + + + Building makefile... + 正在构建makefile... + + + + - Filename: %1 + - 文件名: %1 + + + + Can't open '%1' for write! + 无法写入文件'%1'! + + + + - Resource File: %1 + - 资源文件: %1 + + + + Compiling project changes... + 正在编译项目修改... + + + + - Project Filename: %1 + - 项目文件名: %1 + + + + - Compiler Set Name: %1 + - 编译器配置: %1 + + + + Processing makefile: + 正在处理makefile... + + + + - makefile processer: %1 + - makefile处理器: %1 + + + + - Command: %1 %2 + - 命令: %1 %2 + + + + ProjectCompilerWidget + + + Form + 表单 + + + + Base compiler set: + 基础编译器设置: + + + + Tab 1 + 标签1 + + + + Tab 2 + 标签2 + + + + Customize (apply to this project only): + 自定义设置(仅对本项目生效) + + + + ProjectDirectoriesWidget + + + Form + 表单 + + + + Libraries + 库文件夹 + + + + Includes + 头文件夹 + + + + Resources + 资源文件夹 + + + + ProjectFilesWidget + + + Form + 表单 + + + + File Options + 文件属性 + + + + Include in linking + 参与链接 + + + + Build Priority: + 构建优先级: + + + + Include in compilation + 参与编译 + + + + Compile files as C++ + 作为C++文件编译 + + + + Encoding + 编码 + + + + Override build command: + 自定义构建命令 + + + + ProjectGeneralWidget + + + Form + 表单 + + + + Name: + 名称: + + + + File Name: + 文件名: + + + + Files: + 文件: + + + + TextLabel + 选项 + + + + Default encoding: + 缺省编码: + + + + Icon + 图标 + + + + Remove + 删除 + + + + Browse + 浏览 + + + + Type + 类型 + + + + Win32 GUI + Win32图形界面程序(GUI) + + + + Win32 Console + Win32主控台程序(Console) + + + + Win32 Static Library + Win32静态链接库 + + + + Win32 DLL + Win32动态链接库(DLL) + + + + Default to C++ when creating new files + 新文件缺省为C++文件 + + + + Support Windows XP Themes + 支持Windows XP主题 + + + + Output File: + 输出文件: + + + + %1 files [ %2 sources, %3 headers, %4 resources, %5 other files ] + 共%1个文件[%2个源程序文件,%3个头文件,%4个资源文件,%5个其他文件] + + + + Can't remove old icon file + 无法删除旧图标文件 + + + + Can't remove old icon file '%1' + 无法删除旧图标文件'%1' + + + + Select icon file + 选择图标文件 + + + + Icon Files (*.ico) + 图标文件 (*.ico) + + + + ProjectMakefileWidget + + + Form + 表单 + + + + Use custom make file + 使用自定义Makefile + + + + Browse + 浏览 + + + + Information about using a custom make file + 关于自定义Makefile + + + + Custom makefile + 自定义Makefile + + + + All files (*.*) + 所有文件 (*.*) + + + + ProjectOutputWidget + + + Form + 表单 + + + + + Executable output directory + 可执行文件输出文件夹 + + + + + + browse + 浏览 + + + + Object file output directory + 目标文件输出文件夹 + + + + Auto save compile log + 自动保存编译日志 + + + + Override output filename + 自定义可执行文件名 + + + + Object files output directory + 目标文件输出文件夹 + + + + Log file + 日志文件 + + + + All files (*.*) + 所有文件 (*.*) + + + + ProjectPreCompileWidget + + + Form + 表单 + + + + Use precompiled header + 使用预编译头文件 + + + + Browse + 浏览 + + + + <html><head/><body><p>For more information about gcc precompiled header, see:</p><p><a href="https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html"><span style=" text-decoration: underline; color:#007af4;">https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html</span></a></p></body></html> + <html><head/><body><p>请问访问下面网站以了解有关gcc预定义头文件的信息:</p><p><a href="https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html"><span style=" text-decoration: underline; color:#007af4;">https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html</span></a></p></body></html> + + + + Precompiled header + 预定义头文件 + + + + header files (*.h) + header files (*.h + 文件夹 (*.h) + + + + ProjectTemplate + + + Read failed. + 读取失败. + + + + Can't read template file '%1'. + 无法读取模板文件'%1'. + + + + Template not exist + 模板不存在 + + + + Template file '%1' doesn't exist. + 模板文件'%1'不存在. + + + + Old version template + 旧版本模板 + + + + Template file '%1' has version '%2', which is unsupported. + 已不再支持模板文件'%1'的版本(%2)。 + + + + ProjectVersionInfoWidget + + + Form + 表单 + + + + Include version info in project + 在项目中包括版本信息 + + + + Major + Major + + + + Minor + Minor + + + + Rlease + Release + + + + Build + Build + + + + Language: + 语言: + + + + Original filename + 原始文件名 + + + + Sync product with file version + 同步项目和文件版本 + + + + Internal name + 内部名称 + + + + File version + 文件版本 + + + + Legal trademarks + 注册商标 + + + + Product name + 产品名称 + + + + Company name + 公司名称 + + + + Auto-increase build number on compile + 构建时自动增长构建号 + + + + File description + 文件描述 + + + + Product version + 项目版本 + + + + Legal copyright + 版权 + + QApplication @@ -2916,12 +3823,12 @@ Are you really want to continue? QObject - + Save 保存 - + Save changes to %1? 将修改保存到"%1"? @@ -2930,28 +3837,34 @@ Are you really want to continue? 保存修改后的内容到"%s"? - + + Dev C++ Project files + Dev C++项目文件 + + + C files C语言文件 - + C++ files C++语言文件 - + Header files 头文件 - - Text files - 文本文件 + + Icon files + 图标文件 - + All files + Text files 所有文件 @@ -2977,175 +3890,175 @@ Are you really want to continue? 无法载入自动链接设置 - - - - + + + + The following %1 directories don't exist: 下列%1文件夹不存在: - - + + binary 二进制 - + No %1 directories have been specified. 未指定%1文件夹 - + C include C包含 - - + + C++ include C++包含 - - - - + + + + Cannot find the %1 "%2" 无法找到%1程序"%2" - + C options C语言选项 - + Support all ANSI standard C programs (-ansi) 支持所有ANSI标准C程序(-ansi) - + Do not recognize asm,inline or typeof as a keyword (-fno-asm) 不支持将asm、inline和typeof作为关键字(-fno-asm) - + Imitate traditional C preprocessors (-traditional-cpp) 模仿传统C预处理器行为(-traditional-cpp) - + Code Generation 代码生成 - + Optimize for the following machine (-march) 生成特定机器的专用指令(-march) - + Optimize less, while maintaining full compatibility (-tune) 完整兼容特定机器,较少优化(-tune) - + Enable use of specific instructions (-mx) 启用特定指令集(-mx) - + Optimization level (-Ox) 优化级别(-Ox) - + Compile with the following pointer size (-mx) 使用下列指针大小编译(-mx) - + Language standard (-std) 语言标准(-std) - + Profile 性能分析 - + Generate debugging information (-g3) 生成调试信息(-g3) - + Generate profiling info for analysis (-pg) 生成性能分析信息(-pg) - + Warnings 代码警告 - + Inhibit all warning messages (-w) 忽略所有警告信息(-w) - + Show most warnings (-Wall) 启用常见问题警告(-Wall) - + Show some more warnings (-Wextra) 启用更多问题警告(-Wextra) - + Check ISO C/C++/C++0x conformance (-pedantic) 检查ISO C/C++/C++0x语法一致性(-pedantic) - + Only check the code for syntax errors (-fsyntax-only) 只进行语法检查(不编译)(-fsyntax-only) - + Make all warnings into errors (-Werror) 将警告作为错误处理(-Werror) - + Abort compilation on first error (-Wfatal-errors) 遇到第一个错误后立即中止编译(-Wfatal-errors) - + Linker 链接器 - + Link an Objective C program (-lobjc) 链接Objective-C程序 (-lobjc) - + Do not use standard system libraries (-nostdlib) 不使用标准库和系统启动文件(-nostdlib) - + Do not create a console window (-mwindows) 不产生控制台窗口(-mwindows) - + Strip executable (-s) 剥除附加信息(-s) @@ -3154,43 +4067,43 @@ Are you really want to continue? 链接Ojbective C程序(-lobjc) - + Output 输出 - + Put comments in generated assembly code (-fverbose-asm) 在生成的汇编代码中加入注释(-fverbose-asm) - + Use pipes instead of temporary files during compilation (-pipe) 编译时使用管道而不是临时文件(-pipe) - + Do not assemble, compile and generate the assemble code (-S) 只生成汇编代码(-S) - - + + Confirm 确认 - + The following problems were found during validation of compiler set "%1": 在验证编译器设置"%1"时遇到了下列问题: - + Compiler set not configuared. 未配置编译器设置。 - + Would you like Red Panda C++ to search for compilers in the following locations: <BR />'%1'<BR />'%2'? 您需要小熊猫C++在下列位置搜索编译器吗:<br />%1<br />%2 @@ -3216,25 +4129,47 @@ Are you really want to continue? + No + Yes - + untitled 无标题 - + Index %1 out of range 下标"%1"越界 + + + bytes + 字节 + + + + KB + KB + + + + MB + MB + + + + GB + GB + Can't open file '%1' for read @@ -3492,12 +4427,12 @@ Are you really want to continue? 无标题 - + constructor 构造函数 - + destructor 析构函数 @@ -3517,17 +4452,17 @@ Are you really want to continue? RegisterModel - + Register 寄存器 - + Value(Hex) 值(HEX) - + Value(Dec) 值(DEC) @@ -3672,22 +4607,22 @@ Are you really want to continue? SearchResultListModel - + Current File: 当前文件: - + Files In Project: 项目中的文件: - + Open Files: 打开的文件: - + References to symbol '%1' at '%2':%3 符号'%1'出现在'%2':'%3' @@ -3695,7 +4630,7 @@ Are you really want to continue? SearchResultTreeModel - + Line @@ -3703,8 +4638,8 @@ Are you really want to continue? SearchResultTreeViewDelegate - - + + Line @@ -3860,114 +4795,164 @@ Are you really want to continue? 取消 - + Appearence 外观 - + Environment 环境 - + + Compiler Set 编译器配置集 - - + + Compiler 编译器 - + Auto Link 自动链接 - - - - + + + + + General 通用 - - - - - - - - - + + + + + + + + + Editor 编辑器 - + Font 字体 - + Copy & Export 复制/导出 - + Color 配色 - + Code Completion 代码补全 - + Symbol Completion 符号补全 - + Auto Syntax Checking 自动语法检查 - + Auto save 自动保存 - + Misc 杂项 - + Program Runner 程序运行 - + Debugger 调试器 - + Code Formatter 代码排版 - + + + + + + + + + + Project + 项目 + + + + Files + 文件 + + + + Custom Compile options + 自定义编译选项 + + + + Directories + 文件夹 + + + + Precompiled Header + 预编译头文件 + + + + Makefile + Makefile + + + + Output + 输出 + + + + Version info + 版本信息 + + + Save Changes 保存修改 - + There are changes in the settings, do you want to save them before swtich to other page? 本页中有尚未保存的设置修改,是否保存后再切换到其他页? @@ -3975,42 +4960,42 @@ Are you really want to continue? StdinCompiler - + Checking file syntax... 正在检查语法... - + - Filename: %1 - 文件名: %1 - + - Compiler Set Name: %1 - 编译器配置: %1 - + Can't find the compiler for file %1 找不到适合文件%1的编译器 - + The Compiler '%1' doesn't exists! 编译器程序'%1'不存在! - + Processing %1 source file: 正在处理%1源程序文件: - + %1 Compiler: %2 %1编译器: %2 - + Command: %1 %2 命令: %1 %2 diff --git a/RedPandaIDE/compiler/compilermanager.cpp b/RedPandaIDE/compiler/compilermanager.cpp index 26aa8ce3..0259c3c6 100644 --- a/RedPandaIDE/compiler/compilermanager.cpp +++ b/RedPandaIDE/compiler/compilermanager.cpp @@ -88,6 +88,34 @@ void CompilerManager::compileProject(std::shared_ptr project, bool rebu } } +void CompilerManager::cleanProject(std::shared_ptr project) +{ + if (!pSettings->compilerSets().defaultSet()) { + QMessageBox::critical(pMainWindow, + tr("No compiler set"), + tr("No compiler set is configured.")+tr("Can't start debugging.")); + return; + } + { + QMutexLocker locker(&mCompileMutex); + if (mCompiler!=nullptr) { + return; + } + mCompileErrorCount = 0; + ProjectCompiler* compiler = new ProjectCompiler(project,false,false); + compiler->setOnlyClean(true); + mCompiler->setRebuild(false); + mCompiler = compiler; + connect(mCompiler, &Compiler::compileFinished, this ,&CompilerManager::onCompileFinished); + connect(mCompiler, &Compiler::compileIssue, this, &CompilerManager::onCompileIssue); + connect(mCompiler, &Compiler::compileFinished, pMainWindow, &MainWindow::onCompileFinished); + connect(mCompiler, &Compiler::compileOutput, pMainWindow, &MainWindow::onCompileLog); + connect(mCompiler, &Compiler::compileIssue, pMainWindow, &MainWindow::onCompileIssue); + connect(mCompiler, &Compiler::compileErrorOccured, pMainWindow, &MainWindow::onCompileErrorOccured); + mCompiler->start(); + } +} + void CompilerManager::buildProjectMakefile(std::shared_ptr project) { if (!pSettings->compilerSets().defaultSet()) { diff --git a/RedPandaIDE/compiler/compilermanager.h b/RedPandaIDE/compiler/compilermanager.h index d6abc577..7908991d 100644 --- a/RedPandaIDE/compiler/compilermanager.h +++ b/RedPandaIDE/compiler/compilermanager.h @@ -21,6 +21,7 @@ public: void compile(const QString& filename, const QByteArray& encoding, bool rebuild, bool silent=false,bool onlyCheckSyntax=false); void compileProject(std::shared_ptr project, bool rebuild, bool silent=false,bool onlyCheckSyntax=false); + void cleanProject(std::shared_ptr project); void buildProjectMakefile(std::shared_ptr project); void checkSyntax(const QString&filename, const QString& content, bool isAscii, std::shared_ptr project); void run(const QString& filename, const QString& arguments, const QString& workDir); diff --git a/RedPandaIDE/compiler/projectcompiler.cpp b/RedPandaIDE/compiler/projectcompiler.cpp index 6fd2e535..ecb0a281 100644 --- a/RedPandaIDE/compiler/projectcompiler.cpp +++ b/RedPandaIDE/compiler/projectcompiler.cpp @@ -421,6 +421,16 @@ void ProjectCompiler::writeln(QFile &file, const QString &s) file.write("\n"); } +bool ProjectCompiler::onlyClean() const +{ + return mOnlyClean; +} + +void ProjectCompiler::setOnlyClean(bool newOnlyClean) +{ + mOnlyClean = newOnlyClean; +} + QString ProjectCompiler::pipedText() { return QString(); @@ -446,7 +456,11 @@ bool ProjectCompiler::prepareForCompile() buildMakeFile(); mCompiler = compilerSet()->make(); - if (mRebuild) { + if (mOnlyClean) { + mArguments = QString("-f \"%1\" clean").arg(extractRelativePath( + mProject->directory(), + mProject->makeFileName())); + } if (mRebuild) { mArguments = QString("-f \"%1\" clean all").arg(extractRelativePath( mProject->directory(), mProject->makeFileName())); diff --git a/RedPandaIDE/compiler/projectcompiler.h b/RedPandaIDE/compiler/projectcompiler.h index 779d726f..624ec897 100644 --- a/RedPandaIDE/compiler/projectcompiler.h +++ b/RedPandaIDE/compiler/projectcompiler.h @@ -12,6 +12,9 @@ public: ProjectCompiler(std::shared_ptr project, bool silent,bool onlyCheckSyntax); void buildMakeFile(); + bool onlyClean() const; + void setOnlyClean(bool newOnlyClean); + private: void createStandardMakeFile(); void createStaticMakeFile(); @@ -25,6 +28,8 @@ private: void writeMakeObjFilesRules(QFile& file); void writeln(QFile& file, const QString& s=""); // Compiler interface +private: + bool mOnlyClean; protected: bool prepareForCompile() override; QString pipedText() override; diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp index 29136163..f5533c01 100644 --- a/RedPandaIDE/mainwindow.cpp +++ b/RedPandaIDE/mainwindow.cpp @@ -108,6 +108,10 @@ MainWindow::MainWindow(QWidget *parent) ui->actionEncode_in_ANSI->setCheckable(true); ui->actionEncode_in_UTF_8->setCheckable(true); + mMenuRecentProjects = new QMenu(); + mMenuRecentProjects->setTitle(tr("Recent Projects")); + ui->menuFile->insertMenu(ui->actionExit, mMenuRecentProjects); + mMenuRecentFiles = new QMenu(); mMenuRecentFiles->setTitle(tr("Recent Files")); ui->menuFile->insertMenu(ui->actionExit, mMenuRecentFiles); @@ -155,6 +159,9 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->menuFile, &QMenu::aboutToShow, this,&MainWindow::rebuildOpenedFileHisotryMenu); + connect(ui->menuProject, &QMenu::aboutToShow, + this, &MainWindow::updateProjectActions); + buildContextMenus(); } @@ -262,7 +269,8 @@ void MainWindow::updateProjectActions() ui->actionView_Makefile->setEnabled(hasProject); ui->actionProject_New_File->setEnabled(hasProject); ui->actionAdd_to_project->setEnabled(hasProject); - ui->actionRemove_from_project->setEnabled(hasProject && ui->projectView->selectionModel()->hasSelection()); + ui->actionRemove_from_project->setEnabled(hasProject && ui->projectView->selectionModel()->selectedIndexes().count()>0); + ui->actionMakeClean->setEnabled(hasProject); ui->actionProject_options->setEnabled(hasProject); ui->actionClose_Project->setEnabled(hasProject); updateCompileActions(); @@ -500,11 +508,20 @@ void MainWindow::updateDebugEval(const QString &value) void MainWindow::rebuildOpenedFileHisotryMenu() { mMenuRecentFiles->clear(); + mMenuRecentProjects->clear(); + foreach (QAction* action,mRecentFileActions) { action->setParent(nullptr); action->deleteLater(); } mRecentFileActions.clear(); + + foreach (QAction* action,mRecentProjectActions) { + action->setParent(nullptr); + action->deleteLater(); + } + mRecentProjectActions.clear(); + if (pSettings->history().openedFiles().size()==0) { mMenuRecentFiles->setEnabled(false); } else { @@ -519,6 +536,22 @@ void MainWindow::rebuildOpenedFileHisotryMenu() } mMenuRecentFiles->addActions(mRecentFileActions); } + + if (pSettings->history().openedProjects().size()==0) { + mMenuRecentProjects->setEnabled(false); + } else { + mMenuRecentProjects->setEnabled(true); + for (const QString& filename: pSettings->history().openedProjects()) { + QAction* action = new QAction(); + action->setText(filename); + connect(action, &QAction::triggered, [&filename,this](bool){ + this->openProject(filename); + }); + mRecentProjectActions.append(action); + } + mMenuRecentProjects->addActions(mRecentProjectActions); + } + } void MainWindow::updateClassBrowserForEditor(Editor *editor) @@ -1610,6 +1643,21 @@ void MainWindow::onEditorTabContextMenu(const QPoint &pos) menu.exec(tabBar->mapToGlobal(pos)); } +void MainWindow::prepareProjectForCompile() +{ + if (!mProject) + return; + if (!mProject->saveUnits()) + return; + // Check if saves have been succesful + for (int i=0; ipageCount();i++) { + Editor * e= (*(mEditorList))[i]; + if (e->inProject() && e->modified()) + return; + } + mProject->buildPrivateResource(); +} + void MainWindow::closeProject(bool refreshEditor) { // Stop executing program @@ -3085,18 +3133,17 @@ void MainWindow::on_actionView_Makefile_triggered() { if (!mProject) return; - if (!mProject->saveUnits()) - return; - // Check if saves have been succesful - for (int i=0; ipageCount();i++) { - Editor * e= (*(mEditorList))[i]; - if (e->inProject() && e->modified()) - return; - } - mProject->buildPrivateResource(); + prepareProjectForCompile(); mCompilerManager->buildProjectMakefile(mProject); - openFile(mProject->makeFileName()); - +} + + +void MainWindow::on_actionMakeClean_triggered() +{ + if (!mProject) + return; + prepareProjectForCompile(); + mCompilerManager->cleanProject(mProject); } diff --git a/RedPandaIDE/mainwindow.h b/RedPandaIDE/mainwindow.h index 506c8eb4..890f0bd2 100644 --- a/RedPandaIDE/mainwindow.h +++ b/RedPandaIDE/mainwindow.h @@ -125,6 +125,7 @@ public slots: void onEditorTabContextMenu(const QPoint& pos); private: + void prepareProjectForCompile(); void closeProject(bool refreshEditor); void updateProjectView(); void openFiles(const QStringList& files); @@ -322,6 +323,8 @@ private slots: void on_actionView_Makefile_triggered(); + void on_actionMakeClean_triggered(); + private: Ui::MainWindow *ui; EditorList *mEditorList; @@ -331,6 +334,7 @@ private: QMenu *mMenuEncoding; QMenu *mMenuEncodingList; QMenu *mMenuRecentFiles; + QMenu *mMenuRecentProjects; QMenu *mMenuNew; QComboBox *mCompilerSet; CompilerManager *mCompilerManager; @@ -338,6 +342,7 @@ private: CPUDialog *mCPUDialog; SearchDialog *mSearchDialog; QList mRecentFileActions; + QList mRecentProjectActions; bool mQuitting; QElapsedTimer mParserTimer; QFileSystemWatcher mFileSystemWatcher; diff --git a/RedPandaIDE/settingsdialog/projectdirectorieswidget.cpp b/RedPandaIDE/settingsdialog/projectdirectorieswidget.cpp index c099f63a..6915797f 100644 --- a/RedPandaIDE/settingsdialog/projectdirectorieswidget.cpp +++ b/RedPandaIDE/settingsdialog/projectdirectorieswidget.cpp @@ -11,11 +11,11 @@ ProjectDirectoriesWidget::ProjectDirectoriesWidget(const QString &name, const QS ui->setupUi(this); mLibDirWidget = new CompilerSetDirectoriesWidget(); - ui->tabDirs->addTab(mLibDirWidget,QObject::tr("Libraries")); + ui->tabDirs->addTab(mLibDirWidget,tr("Libraries")); mIncludeDirWidget = new CompilerSetDirectoriesWidget(); - ui->tabDirs->addTab(mIncludeDirWidget,QObject::tr("Includes")); + ui->tabDirs->addTab(mIncludeDirWidget,tr("Includes")); mResourceDirWidget = new CompilerSetDirectoriesWidget(); - ui->tabDirs->addTab(mResourceDirWidget,QObject::tr("Resources")); + ui->tabDirs->addTab(mResourceDirWidget,tr("Resources")); } diff --git a/RedPandaIDE/settingsdialog/projectprecompilewidget.cpp b/RedPandaIDE/settingsdialog/projectprecompilewidget.cpp index 5e0a0e75..9cd68a36 100644 --- a/RedPandaIDE/settingsdialog/projectprecompilewidget.cpp +++ b/RedPandaIDE/settingsdialog/projectprecompilewidget.cpp @@ -36,7 +36,7 @@ void ProjectPreCompileWidget::on_btnBrowse_triggered(QAction *arg1) this, tr("Precompiled header"), pMainWindow->project()->directory(), - tr("header files (*.h")); + tr("header files (*.h)")); if (!fileName.isEmpty() && QFileInfo(fileName).exists()) { ui->txtPrecompileHeader->setText(fileName); }