因为要写界面,所以开始学习使用Qt,写点博客记录学习过程中使用的例子与大家交流一下。例子包含完整代码。下面这个例子是计算圆面积的,显示一个对话框,在上面输入半径后显示出面积。本例来自陆文周老师所著的《Qt5开发及实例》(第3版),我按照自己的习惯与环境做了一些修改。
操作系统:Ubuntu 16.0.4 64位桌面版
IDE:Visual Studio Code 1.30.2
构建工具:CMake 3.5.1
GUI:Qt 4.8.7
需要手工(或半手工)编写的文件有:main.cpp、dialog.h、dialog.cpp、CMakeLists.txt与c_cpp_properties.json。目录结构如下图:
/**
* \file main.cpp
* \brief 主程序
*
* \copyright free
* \author 略
* \email 略
* \version 略
* \date 略
* \since 略
*/
#include
#include
#include "dialog.h"
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
// 解决中文显示问题
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
Dialog dialog;
dialog.show();
return a.exec();
}
/**
* \file dialog.h
* \brief Dialog类头文件
* 定义Dialog类。
* \copyright free
* \author 略
* \email 略
* \version 略
* \date 略
* \since 略
*/
#ifndef EXERCISE001_SRC_DIALOG_H_
#define EXERCISE001_SRC_DIALOG_H_
#include
#include
#include
#include
class Dialog : public QDialog {
Q_OBJECT // 启动Qt对象系统的一些特性(如支持信号和槽等)
public:
Dialog(QWidget *parent = 0);
~Dialog();
private:
QLabel *label1_;
QLabel *label2_;
QLineEdit *line_edit_;
QPushButton *button_;
private slots:
void ShowArea(void);
};
#endif // EXERCISE001_SRC_DIALOG_H_
/**
* \file dialog.cpp
* \brief Dialog类实现文件
* Dialog类实现代码。
* \copyright free
* \author 略
* \email 略
* \version 略
* \date 略
* \since 略
*/
#include "dialog.h"
#include
const static double PI = 3.1416;
Dialog::Dialog(QWidget *parent) : QDialog(parent) {
this->setWindowTitle("计算圆面积");
label1_ = new QLabel(this);
label1_->setText(tr("请输入圆的半径:"));
line_edit_ = new QLineEdit(this);
label2_= new QLabel(this);
button_ = new QPushButton(this);
button_->setText(tr("显示对应圆的面积"));
QGridLayout *main_layout=new QGridLayout(this);
main_layout->addWidget(label1_,0,0);
main_layout->addWidget(line_edit_,0,1);
main_layout->addWidget(label2_,1,0);
main_layout->addWidget(button_,1,1);
connect(button_, SIGNAL(clicked()), this, SLOT(ShowArea()));
connect(line_edit_, SIGNAL(textChanged(QString)), this, SLOT(ShowArea()));
}
Dialog::~Dialog() {
}
// \brief 计算圆面积
void Dialog::ShowArea(void) {
bool ok;
QString temp_str;
QString radius_str = line_edit_->text();
double radius = radius_str.toDouble(&ok);
double area = radius * radius * PI;
label2_->setText(temp_str.setNum(area));
return;
}
#// CSDN 陆巍的博客:https://blog.csdn.net/weixin_44420912
# 指定运行此配置文件所需的CMake最低版本
cmake_minimum_required(VERSION 3.0)
# 项目名称
project(exercise001)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# 为Qt目标自动处理moc。
set(CMAKE_AUTOMOC ON)
# 搜索Qt4相关库
find_package(Qt4 REQUIRED)
include(${QT_USE_FILE})
# 在源文件编译中添加-D定义标志
add_definitions(-std=c++11)
# 搜集所有在指定路径下的源文件的文件名,将输出结果列表储存在指定的变量中
aux_source_directory(src/ DIR_SRCS)
# 使用给定的源文件,为工程引入一个可执行文件
add_executable(${PROJECT_NAME} ${DIR_SRCS})
# 添加链接库,相同于指定-l参数
target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES})
{
"configurations": [
{
"name": "Linux",
"includePath": [
"/usr/share/qt4/mkspecs/linux-g++-64",
"/usr/include/qt4/QtCore",
"/usr/include/qt4/QtGui",
"/usr/include/qt4"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
}
],
"version": 4
}
编译后运行的效果如下:
补充说明:
1)我使用的Qt4是直接在终端中输入命令“sudo apt install qt4-dev-tools”安装的;
2)在编写完CMakeLists.txt文件后,我这里并没有立刻在窗口下面出现“build”的按钮,要关闭VSCode后再打开才会出现,具体原因没有去了解,目前并不影响工作。
3)c_cpp_properties.json文件主要提供Qt头文件目录的,如果没有的话,在包含Qt头文件的地方会有提示。这个文件由系统生成,但需要自己在此文件中设置头文件的路径。