在CLion中使用Qt

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013859301/article/details/53186808

做这件事的起因是因为自己要频繁的写ROS,有的应用难免需要采用图形界面编程,第一想到的肯定是Qt。然而qt使用自己的qmake进行管理,但ROS使用的是CMake。本文介绍了如何在CLion中配置使用qt4。

Qt编译框架

  1. Qt引用了信号和槽机制,因此在语法上对C++进行了部分扩充,qt提供了moc软件对代码进行预处理。
  2. Qt的ui文件需要用uic软件生成ui_filename.h文件供qt中的代码文件来引用。

CMakelist配置

有了上面的两条补充知识,具体操作也很清楚了。我们只要在传统CMakelists.txt上加上moc和uic操作即可。具体为如下两条:

QT4_WRAP_UI(UI widget.ui)
QT4_WRAP_CPP(UI_CPP  Widget.h)

处理后的文件名为UI和UI_CPP,在需要的地方引用即可。

实例

文件目录

.
├── bin
│   └── learn_qt_clion
├── CMakeLists.txt
├── main.cpp
├── Widget.h
└── widget.ui

CMakelist.txt

cmake_minimum_required(VERSION 3.6)
project(learn_qt_clion)

set(CMAKE_INCLUDE_CURRENT_DIR  on)

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

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
find_package(Qt4 REQUIRED)
include(${QT_USE_FILE})
include_directories(${Qt4_INCLUDE_DIRECTORIES})
include_directories(/usr/include)
QT4_WRAP_UI(UI widget.ui)
QT4_WRAP_CPP(UI_CPP  Widget.h)
set(SOURCE_FILES  main.cpp  ${UI_CPP})
add_executable(learn_qt_clion ${SOURCE_FILES})
target_link_libraries(learn_qt_clion ${QT_LIBRARIES} )

main.cpp

#include "Widget.h"

int main(int argc, char* argv[]) {
    QApplication a(argc, argv);

    Widget w;
    w.setGeometry(500, 200, 320, 240);
    w.show();
    return a.exec();
}

Widget.h

//
// Created by meng on 16-11-16.
//

#ifndef LEARN_QT_CLION_WIDGET_H
#define LEARN_QT_CLION_WIDGET_H

#include <QtGui/QtGui>
#include <QtCore/QtCore>
#include <QtCore/QObject>
#include "ui_widget.h"

class Widget : public QWidget {
    Q_OBJECT
public:
    Widget(QWidget* parent = 0){
        m_iCount = 0;
        ui.setupUi(this);
        connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(slotPushButton()));
    }
    ~Widget(){}

private slots:
    void slotPushButton(){
        ++m_iCount;
        ui.lineEdit->setText(QString::number(m_iCount));
    }

private:
    Ui::Form ui;
    int m_iCount;
};


#endif //LEARN_QT_CLION_WIDGET_H

运行结果

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u013859301/article/details/53186808