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

Qt是一个跨平台的c++图形用户界面用用程序框架。

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

label

给按钮添加事件:右键, 转到槽, click信号。

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.setWindowTitle("diyige progma");//设置窗口标题
    w.show();

    return a.exec();
}
void Widget::on_pushButton_clicked()
{
    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);
}

5.控件

[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();
}
时间: 2024-10-07 18:46:54

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

嵌入式linux QT开发(一)——QT简介

嵌入式linux QT开发(一)--QT简介 一.QT简介 1.QT简介 QT是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt Creator, QtEmbedded,Qt Designer快速开发工具,Qt Linguist国际化工具等部分,Qt支持所有Linux/Unix系统,还支持Windows平台. 2.QT优点 Qt是一个跨平台的C++图形用户界面应用程序框架,提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt很容易扩展,并且允许真正地组

QT开发(九)——QT单元组件

QT开发(九)--QT单元组件 QT有三种单元组件,分别为列表单元组件QListWidget.树形单元组件QTreeWidget.表格单元组件QTableWidget. 一.QListWidget列表单元 1.QListWidget组件简介 QListWidget列表单元组件继承自QListView,是基于单元的列表组件.QListWidget可以显示一个清单,清单中的每个项目是QListWidgetItem的一个实例,每个项目可以通过QListWidgetItem来操作.可以通过QListWi

嵌入式linux QT开发(四)——QT Creator工程管理

嵌入式linux QT开发(四)--QT Creator工程管理 一.QT Creator工程管理 QT Creator以工程项目的方式对源码进行管理,一个QT工程中包含不同类型的文件如下: A..pro项目描述文件 B..pro.user用户描述文件 C..h头文件 D..cpp源文件 E..ui界面描述文件 F.资源文件(图片.音频等) 二..pro项目描述文件 1..pro项目描述文件基本构成如下: A.#注释起始符 B.QT模块声明 C.TARGET可执行文件名 D.TEMPLATE程序

QT开发(七)——QT按钮组件

QT开发(七)--QT按钮组件 QT中有六种按钮组件,分别是按压按钮QPushButton.工具按钮QToolButton.单选按钮QRadioButton.多选按钮QCheckBox.命令链接按钮QCommandLinkButton.按钮盒QButtonBox. 一.QPushButton组件 1.QPushButton组件简介 QPushButton组件用于接受用户点击事件,能够显示提示字符串,是功能性组件,需要父组件作为容器,能够在父组件中进行定位,用于执行命令或触发事件. QPushBu

QT开发(八)——QT单元视图组件

QT开发(八)--QT单元视图组件 QT中有四种单元视图组件,分别为列表视图QListView.树形视图QTreeView.表格视图QTableView.列视图QColumnView. 一.QListView列表视图 1.QListView组件简介 QListView列表视图,继承自QAbstractItemView.QListView是基于模型的列表/图标视图,不显示表头和表框,为Qt的模型/视图结构提供了更灵活的方式. 2.QListView组件属性 QListView组件属性设置: A.n

QT开发(十三)——QT信号与槽机制

QT开发(十三)--QT信号与槽机制 一.QT消息模型 QT封装了具体操作系统的消息机制,遵循经典的GUI消息驱动事件模型. QT定义了与操作系统消息相关的自己的概念,即信号与槽. 信号signal是由操作系统产生的消息. 槽slot是程序中的消息处理函数. connect将系统消息绑定到消息处理函数. 信号到槽的连接必须发生在两个QT对象间. bool QObject::connect ( const QObject * sender, //发生对象 const char * signal,

嵌入式linux QT开发(二)——QT开发环境搭建

嵌入式linux QT开发(二)--QT开发环境搭建 一.Windows系统QT开发环境搭建 操作系统:Windows 7 QT Creator:qt-creator-win-opensource-2.4.1 QT SDK:qt-win-opensource-4.7.4-mingw 1.安装QT Creator 点击qt-creator-win-opensource-2.4.1源程序安装. 2.安装QT SDK 点击qt-win-opensource-4.7.4-mingw源程序安装. 选择mi

QT开发(六)——QT容器组件

QT开发(六)--QT容器组件 QT中有九种容器组件,分别是组合框QGroupBox.滚动区QScrollArea.工具箱QToolBox.选项卡QTabWidget.控件栈QWidgetStack.框架QFrame.组件QWidget.MDI窗口显示区QMdiArea.停靠窗口QDockWidget. 一.QGroupBox分组框 1.QGroupBox组件简介 QGroupBox为构建分组框提供了支持.分组框通常带有一个边框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件.分组框

【Qt开发】01-第一个Qt程序Hello World!

一:说在前头 我的第一份工作是做生产工具,当时用的MFC,IDE是VC6.0,现在想想真是古董级别,10年至今,微软也一直没有对MFC进行升级, 冥冥中感觉微软自己都放弃MFC了,市场上貌似MFC的岗位越来越了,基本上也都是原先的项目维护,qt已经成为新的客户端开发的趋势, 顺者昌,逆者亡,无奈只能放弃MFC转投Qt了,Qt实现了跨平台功能,一套代码可以在windows,linux,mac上运行,大大节省了开发者平台移植 工作量,Qt号称要做出像网页一样漂亮的界面,小编会出一系列的Qt开发的文章