zl程序教程

您现在的位置是:首页 >  工具

当前栏目

【C/C++学院】(13)QT开发技术/QT 基础/QT 信号和槽

QtC++基础 13 信号 学院 开发技术
2023-09-14 08:57:16 时间

Qt安装说明:

windows下环境变量path需要加入以下路径,以便QT写的程序可以离开QT开发环境独立运行
C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin\;C:\Qt\Qt5.2.0\Tools\mingw48_32\bin;


linux下需要设置.bash_profile文件
PATH中加入/opt/Qt5.2.0/5.2.0/gcc/bin
用root用户登录系统,进入/usr/lib目录后执行
ln libGL.so.1 libGL.so

1.入门程序

界面程序:求两个整数的和。 用到的控件: lineEdit  pushButton

QString s1 = ui- lineEdit- text();//得到lineEdit中用户输入的文本 QString s2 = ui- lineEdit_2- text(); int a = s1.toInt() + s2.toInt();//将文本转化为整数后相加 ui- label- setText(QString::number(a));//将整数转化为QSting类型,然后设置lable的text }




2.qt程序移植

linux下qt程序移植:将windows下面编写的源代码(不要.user)复制到linux系统用户目录下面。
cd 回家, 切换到用户的主目录。
修改.bash_profile,添加PATH变量中qmake的路径。
qmake 命令添加到环境变量中。
qmake生成Makefile, 然后make进行编译。
编译过程中报错,缺少LG库。
以root用户切换到 /usr/lib、 查看 ls libGL.so*
发现有待版本号后缀的库文件。libGL.so.1     libGLso.2
建立快捷方式:ln libGL.so.1 libGL.so
再次编译,生成可执行程序,在图形界面下面,双击执行程序。


3.环境变量的设置

如何在windows下面找到xx.exe程序直接双击,提示找不到库不能运行,需要将qt安装时候的路径
为了使qt写的应用程序能够离开qt开发环境单独运行,需要修改windows下面的path环境变量。
C:\Program Files\ARM\ADSv1_2\bin;D:\android_env\android-sdk-windows\platform-tools;%JAVA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\VisualSVN Server\bin;D:\Program Files\TortoiseSVN\bin;D:\Program Files\Altium Designer Summer 09\System;C:\Program Files\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;D:\Qt\Qt5.2.0\Tools\mingw48_32\bin;D:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin


4.用代码实现界面

创建项目,注意去掉对勾。


//dialog.h

#ifndef DIALOG_H

#define DIALOG_H

#include QDialog 

//控件头文件

#include QPushButton 

#include QLineEdit 

#include QLabel 

class Dialog : public QDialog

 Q_OBJECT

public:

 Dialog(QWidget *parent = 0);

 ~Dialog();

private:

 QPushButton *btn1;

 QLineEdit *edit1, *edit2;

 QLabel *label1;

private slots://槽

 void add();

#endif // DIALOG_H

//dialog.cpp

#include "dialog.h"

#include QGridLayout 

Dialog::Dialog(QWidget *parent)

 : QDialog(parent)

 //实例化成员

 btn1 = new QPushButton(this);

 edit1 = new QLineEdit(this);

 edit2 = new QLineEdit(this);

 label1 = new QLabel(this);

 btn1- setText("求和");

 label1- setText("label");

 QGridLayout *layout = new QGridLayout(this);

 layout- addWidget(edit1, 0, 0);

 layout- addWidget(edit2, 0, 1);

 layout- addWidget(btn1, 1, 0);

 layout- addWidget(label1, 1, 1);

 //将btn1的点击事件和add()关联

 connect(btn1, SIGNAL(clicked()),this, SLOT(add()));

Dialog::~Dialog()

void Dialog::add()

 QString s1 = edit1- text();//得到edit1控件中输入的文本

 QString s2 = edit2- text();

 bool ok = false;

 int a = s1.toInt( ok, 16);

 if (ok == false)

 return;

 int b = s2.toInt( ok, 16);//转化为16进制整数后求和

 if (ok == false)

 return;

 label1- setText(QString::number(a+b, 16));

//main.cpp

#include "dialog.h"

#include QApplication 

int main(int argc, char *argv[])

 QApplication a(argc, argv);

 Dialog w;

 w.setWindowTitle("用代码实现的界面:16进制计算");

 w.show();

 return a.exec();



void Dialog::add()

 QString s1 = edit1- text();//得到edit1控件中输入的文本

 QString s2 = edit2- text();

 QString s3;

//将QString转化为c风格的const char * 字符串

//利用sprintf()进行格式化输出

 s3.sprintf("%s,%s", s1.toStdString().data(), s2.toStdString().data());

 label1- setText(s3);

}

[Tool Button ] autoraise属性
[check box]

void Widget::on_pushButton_clicked()

 //判断是否选中状态

 if(ui- checkBox- checkState())

 ui- label- setText("true");

 else

 ui- label- setText("flase");

}


[comboBox]下拉列表
右键-- 编辑项目-- 加号
[fontComboBox]字体选择下拉列表
[textEdit]

void Widget::on_pushButton_clicked()

 ui- label- setText(ui- textEdit- toPlainText());

}


常用控件:
QDateTime类,头文件#include QDateTime 可以使用QDateTime类来获得系统时间。
通过QDateTime::currentDateTime()来获取本地系统的时间和日期信号。可以通过date()he 
time()来返回datetime中的日期和时间部分:

#include "QDateTime"

void Widget::on_pushButton_clicked()

 QDateTime *time1 = new QDateTime(QDateTime::currentDateTime());

 this- setWindowTitle(time1- date().toString());

}


常用控件:
QTime类:定时器(QTimer)
新建一个定时器。QTimer *time_clock = new QTimer(this);
连接这个定时器的信号和槽,利用定时器的timeout()。
connect(time_clock, SIGNAL(timout()), this, SLOT(slottimedone()));
time_clock- start(1000);
开启定时器,并设定定时周期。
定时器定时有两种方式,start(int time)和setSingleShot(true).其中,start(int time)表示
每个“time"秒就会重启定时器。可以重复触发定时,利用stop()将定时器关掉;而
setSingleShot(true)则是仅启动定时器一次。

void Dialog::add()

 if(time1- isActive())//如果按钮激活,停止及时

 time1- stop();

 else

 time1- start(1000);//每隔1s执行一次on_time函数

void Dialog::on_time()

 QDateTime *date1 = new QDateTime(QDateTime::currentDateTime());

 QString s;

 s.sprintf("%d:%d:%d",date1- time().hour(),date1- time().minute(),date1- time().second());

 setWindowTitle(s);

}


常用控件
创建窗口
如果widget未使用父级进行创建,则在显示时视为窗口或顶层widget.
由于顶层widget没有父级对象类来确保在其不再使用时就删除,所以需要
开发人员在应用程序中对其进行跟踪。
在本例中,使用QWidget创建和显示具有默认大小的窗口:

void Dialog::add()

 QWidget *window = new QWidget();

 window- resize(320, 240);

 window- show();

 QPushButton *button = new QPushButton(tr("Press me"), window);

 button- move(100, 100);

 button- show();

}






C/C++ Qt 编译打包项目 Qt程序编译后,需要去qt目录拷贝几个文件,与qt程序放在一起该程序才可以脱离开发环境而独立运行下去,在开发环境下编译好代码以后,还需要进行以下操作将其打包才可以在别的机器上正常运行。
C/C++ Qt 常用数据结构 QT是一个跨平台的图形化类库,常用数据结构就是对C++ STL的二次封装,使其更加易用,如下是经常会用到的一些数据结构和算法笔记。
C/C++ Qt 信号自定义槽函数 Qt中实现自定义信号与槽函数,信号用于发送并触发槽函数,槽函数则是具体的功能实现,如下我们以老师学生为例子简单学习一下信号与槽函数的使用方法。
C/C++ Qt 基本文件读写方法 Qt文件操作有两种方式,第一种使用QFile类的IODevice读写功能直接读写,第二种是利用 QFile和QTextStream结合起来,用流的方式进行文件读写。
C/C++ Qt QThread 线程组件应用 QThread库是QT中提供的跨平台多线程实现方案,使用时需要继承QThread这个基类,并重写实现内部的Run方法,由于该库是基本库,默认依赖于`QtCore.dll`这个基础模块,在使用时无需引入其他模块.
C/C++ Qt QChart 绘图组件应用 QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于`GraphicsView`模式实现,其核心是`QChartView`和`QChart`的二次封装版。
C/C++ Qt 基础通用组件的应用 QT 是一个跨平台C++图形界面开发库,利用QT可以快速开发跨平台窗体应用程序,在QT中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率。
C/C++ Qt ToolBar 菜单栏组件应用 ToolBar工具栏在所有窗体应用程序中都广泛被使用,使用ToolBar可以很好的规范菜单功能分类,用户可根据菜单栏来选择不同的功能,Qt中默认自带ToolBar组件,当我们以默认方式创建窗体时,ToolBar就被加入到了窗体中,一般是以QToolBar的方式存在于对象菜单栏,如下所示。