jjzjj

c++ - 如何将 CLion (1.2.4) 用于涉及 Qt Creator 的项目?

coder 2024-02-18 原文

Qt Creator 使 GUI 创建变得非常容易,但我宁愿使用 CLion 进行编码部分,并且只使用 Qt Creator 进行 GUI 编辑。

最佳答案

绝对有可能!

我在 Mac 上,所以我做的一些事情在其他操作系统上不会完全相同。它们是小而简单的事情,一点点 google-fu 应该可以相对轻松地修复。

步骤 1:创建 Qt Creator 项目

我将在此示例中使用小部件应用程序。稍后我将讨论其他类型的项目。

我强烈推荐的一件事是将构建目录(在侧边栏上的“项目”选项卡下)更改为相对路径而不是绝对路径,尤其是在进入 GitHub 或类似路径时。我把它改成了 ./QtBinDebug .

哦,记得复制或以其他方式将 main.cpp 的内容保存在一个单独的位置。为以后。

Qt 就是这样。从现在开始,我们只需要在编辑 GUI 时使用 Qt Creator。

第 2 步:在 CLion 中打开项目

CLion 需要创建一些文件才能使用我们的项目。告诉 CLion 创建一个新项目,但将项目命名为与我们在 Qt Creator 中创建的完全相同的项目,并将 CLion 指向相同的路径。它应该警告你已经存在的文件,忽略它。

CLion 将非常有帮助地覆盖 main.cpp .把你从 QtCreator 复制的东西放回去。

第 3 步:调用正确的 Makefile

Qt Creator 实际上会生成它自己的 makefile,它将调用 qmake,并执行一大堆其他魔术。太疯狂了...我可以替换我现有的 CMakeLists.txt

cmake_minimum_required(VERSION 3.3)
project(WindowTest)
set(QT_BIN "${PROJECT_SOURCE_DIR}/QtBinDebug")
add_custom_target(qtMakeFile COMMAND make -C ${QT_BIN})

这将完美地构建项目!唯一的问题是 CLion
目前仅支持 CMake 项目。上面的 CMakeLists 通过告诉 CMake 只调用 make 来解决这个问题。在正确的 makefile 上,但 IDE 本身不知道如何解释我们的代码......

第 4 步:找出 Qt 库的安装位置

我通过 Homebrew 安装了 Qt,并在 /usr/local/Cellar/qt5/5.5.1_2/lib/cmake 找到了我需要的库.如果你告诉 Homebrew 链接安装,/usr/local/opt/qt5/lib/cmake也可以工作,并且还有一个额外的好处,就是让你的 Qt 版本保持最新,而无需更改任何内容!

第 5 步:在 CLion 的 Qt 库中链接

如果您像我一样,当 CLion 会自动完成所有内容并且不会到处乱扔红色文本时,您宁愿使用 CLion。

我们需要告诉 CLion 在哪里寻找它缺少的库。对于一个基本的 Widgets 项目,我需要 Qt5CoreQt5Widgets .要确定您需要什么,请检查 Qt Creator 生成的 makefile。您应该在 LIBS 的顶部附近找到您需要的东西。宏。

对于链接,我们将使用 find_package(...)target_link_libraries(...)命令。虽然我们可以将所有内容硬编码到这两个命令中,但我认为将其分解一点是个好主意。

另一个小细节是 Qt Creator 放置在构建目录中的头文件。对于骨架小部件项目,它是 ui_mainwindow.h .我们可以告诉 CLion 在哪里查看 include_directories(...)命令。

我的 CMakeLists.txt :
cmake_minimum_required(VERSION 3.3)
project(WindowTest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

#Base QT directory
set(QT_PATH "/usr/local/opt/qt5")
#Build output path of your QT Creator project
set(QT_BIN "${PROJECT_SOURCE_DIR}/QtBinDebug")

#Qt5 paths
#Qt5 library path
set(QT5_LIB_DIR ${QT_PATH}/lib/cmake)
#Qt5 individual libraries
set(QT5_CORE ${QT_LIB_DIR}/Qt5Core)
set(QT5_WIDGETS ${QT_LIB_DIR}/Qt5Widgets)
set(QT5_GUI ${QT_LIB_DIR}/Qt5Gui)

#Libraries to link to. The :: is for convenience
set(QT_LIBRARIES Qt5::Core Qt5::Widgets Qt5::Gui)
#Libraries required. Probably the same as above minus the '::'. find_package() will be called on these
set(QT_LIBRARIES_REQUIRED Qt5Core Qt5Widgets Qt5Gui)

#find packages
foreach(QT_LIBRARIES_REQUIRED ${QT_LIBRARIES_REQUIRED})
    find_package( ${QT_LIBRARIES_REQUIRED} REQUIRED )
endforeach()

add_custom_target(qtMakefile COMMAND make -C ${QT_BIN})

include_directories(${QT_BIN})

set(SOURCE_FILES main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)

add_executable(WindowTest ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES})

第 6 步:设置 CLion 以实际正确运行事物

运行配置菜单中应该会弹出一个配置。对我来说,上面的 CMake 文件就是 qtMakefile。我们需要对该目标做最后一件事,所以点击“编辑配置...”

我们需要选择 CLion 在构建后应该运行的可执行文件。在可执行文件部分,单击“选择其他...”并选择小部件的可执行文件。我的是在 QtBinDebug/WindowTest.app/Contents/MacOS/WindowTest .

就是这样!恭喜!

缺点

调试不起作用。调试器没有在我放入测试程序的简单 hello world 上进行链接。不过,说实话,我真的不想掉进那个兔子洞。

优点

自动完成 wazoo

关于c++ - 如何将 CLion (1.2.4) 用于涉及 Qt Creator 的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35667676/

有关c++ - 如何将 CLion (1.2.4) 用于涉及 Qt Creator 的项目?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  7. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  8. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  9. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  10. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

随机推荐