小言_互联网的博客

【QT】linux下用qmake编译QT代码

334人阅读  评论(0)

       现在最新版的QT都会自配有qtcreater这个IDE辅助开发人员进行UI设计和程序编写,但有的系统版本(如ARM、aarch64)并无qtcreater,所以想要使用linux下QT的qmake编译代码,如果没有可以在官网上面安装一个或者自己编译一个(怎么编译可以参考以前写过的文章:【QT】aarch64(ARM)系统下编译aarch64(ARM)版本的QT),博主的qmake就存放在以下目录中: 

       博主准备了四个源文件,分别如下:

       其中mainwindow.ui 是QT的UI界面文件,博主只是在里面加了两个按钮,代码如下:


  
  1. <?xml version="2.0" encoding="UTF-8"?>
  2. <ui version="4.0">
  3. <class>MainWindow </class>
  4. <widget class="QMainWindow" name="MainWindow">
  5. <property name="geometry">
  6. <rect>
  7. <x>0 </x>
  8. <y>0 </y>
  9. <width>362 </width>
  10. <height>130 </height>
  11. </rect>
  12. </property>
  13. <property name="windowTitle">
  14. <string>MainWindow </string>
  15. </property>
  16. <widget class="QWidget" name="centralwidget">
  17. <widget class="QPushButton" name="pushButton">
  18. <property name="geometry">
  19. <rect>
  20. <x>20 </x>
  21. <y>20 </y>
  22. <width>141 </width>
  23. <height>31 </height>
  24. </rect>
  25. </property>
  26. <property name="text">
  27. <string>千万不要点这个按钮 </string>
  28. </property>
  29. </widget>
  30. <widget class="QPushButton" name="pushButton_2">
  31. <property name="geometry">
  32. <rect>
  33. <x>180 </x>
  34. <y>20 </y>
  35. <width>161 </width>
  36. <height>31 </height>
  37. </rect>
  38. </property>
  39. <property name="text">
  40. <string>旁边这个也不能按呀喂! </string>
  41. </property>
  42. </widget>
  43. </widget>
  44. <widget class="QMenuBar" name="menubar">
  45. <property name="geometry">
  46. <rect>
  47. <x>0 </x>
  48. <y>0 </y>
  49. <width>362 </width>
  50. <height>23 </height>
  51. </rect>
  52. </property>
  53. </widget>
  54. <widget class="QStatusBar" name="statusbar"/>
  55. </widget>
  56. <resources/>
  57. <connections/>
  58. </ui>

        然后就是main.cpp ,主要负责构造一个UI类启动界面等一些初始化工作:


  
  1. #include "mainwindow.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication a(argc, argv);
  6. MainWindow w;
  7. w.show();
  8. return a.exec();
  9. }

      紧接着就是mainwindow.cpp ,按钮触发事件实现代码以及一些析构构造实现函数:


  
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent)
  4. : QMainWindow(parent)
  5. , ui( new Ui::MainWindow)
  6. {
  7. ui->setupUi( this);
  8. }
  9. MainWindow::~MainWindow()
  10. {
  11. delete ui;
  12. }
  13. void MainWindow::on_pushButton_clicked()
  14. {
  15. QMessageBox::information( NULL, "点了呀", "点了其实也没啥~");
  16. }
  17. void MainWindow::on_pushButton_2_clicked()
  18. {
  19. QMessageBox::warning( NULL, "点了呀", "点就点了");

       最后就是它的头文件mainwindow.h :


  
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QMessageBox>
  5. QT_BEGIN_NAMESPACE
  6. namespace Ui { class MainWindow; }
  7. QT_END_NAMESPACE
  8. class MainWindow : public QMainWindow
  9. {
  10. Q_OBJECT
  11. public:
  12. MainWindow(QWidget *parent = nullptr);
  13. ~MainWindow();
  14. private slots:
  15. void on_pushButton_clicked();
  16. void on_pushButton_2_clicked();
  17. private:
  18. Ui::MainWindow *ui;
  19. };
  20. #endif // MAINWINDOW_H

         准备好以上文件之后我们就执行以下指令:


  
  1. /opt/Qt5 .12 .10/ 5.12 .10/gcc_64/bin/qmake -project "QT+=widgets"
  2. //博主的qmake路径是这个,每个人的qmake路径不同,需要按照实际情况来

        至于这些参数是什么意思,可以参考QT官方给出的解释,下面给出部分解释:


  
  1. QMake has two modes, one mode for generating project files based on
  2. some heuristics, and the other for generating makefiles. Normally you
  3. shouldn't need to specify a mode, as makefile generation is the default
  4. mode for qmake, but you may use this to test qmake on an existing project
  5. Mode:
  6. - project Put qmake into project file generation mode
  7. In this mode qmake interprets [files] as files to
  8. be added to the .pro file. By default, all files with
  9. known source extensions are added.
  10. Note: The created .pro file probably will
  11. need to be edited. For example add the QT variable to
  12. specify what modules are required.
  13. -makefile Put qmake into makefile generation mode ( default)
  14. In this mode qmake interprets files as project files to
  15. be processed, if skipped qmake will try to find a project
  16. file in your current working directory

        指令执行结束后会多出来一个.pro为后缀的工程文件:

        如果说你的程序里面还依赖了其他的一些什么库,可以在工程文件里面把连接也加上来,比如博主需要用到同样路径下的libtest.so这个动态库则:

        而后在执行一次qmake指令:

/opt/Qt5.12.10/5.12.10/gcc_64/bin/qmake

        然后就会多出来一个Makefile:

        最后make一下就可以生成一个可执行文件:

      执行下程序就发现是可以运行的:

     注:当你出来各种各样的错误时,有没有想过是权限问题或者是路径问题?


转载:https://blog.csdn.net/qq_41884002/article/details/117112563
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场