IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 学习QT时的笔记 -> 正文阅读

[C++知识库]学习QT时的笔记

参考代码

Q_OBJECT : 宏 定义了槽和信号的相关属性和方法

自定义窗口类

代码中myButton类是自定义按钮类,继承QPushButton类

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include "mybutton.h"

namespace selfSpace
{

class myWidget;

class myWidget : public QWidget
{
    Q_OBJECT
public:
    myWidget(QWidget *parent = 0);
    myWidget(QWidget *parent,int w,int h);
    ~myWidget();
private:
    void connectButton(void);
    void buttonMake(void);
    myButton* b1;
    myButton* b2;
};

}   //namespace selfSpace

#endif // MYWIDGET_H

mywidget.cpp

#include "mywidget.h"
#include "mybutton.h"

namespace selfSpace
{

myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
{
    buttonMake();
    b1->move(540,580);
    b2->move(0,0);
    this->resize(600,600);
    connectButton();
}

myWidget::myWidget(QWidget *parent, int w, int h)
    : QWidget(parent)
{
    this->resize(w,h);
    buttonMake();
    b2->move(w-60,h-20);
    connectButton();
}

void myWidget::connectButton()
{
    //connect -> 信号与槽的链接函数,一个模板函数
    //connect(信号来源(sender),信号(single),this(接收信号的对象),信号处理函数(槽slot),类型(type,默认赋值QT::AutoConnection));
    connect(b1,myButton::clicked,this,myWidget::close);
    //myButton::clicked -> 函数指针 继承QPushButton的方法
    //myWidget::close -> 函数指针 ,继承与QWidget
}

void myWidget::buttonMake(void)
{
    b1 = new myButton(this);
    b2 = new myButton(this);
    b1->setText("Button1");
    b2->setText("Button2");
    b1->resize(60,20);
    b2->resize(60,20);
}

myWidget::~myWidget()
{
    delete b1;
    delete b2;
}

}   //namespace selfSpace

自定义按钮类

继承QPushButton类

mybutton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H

#include <QPushButton>  //继承了QWidget类

namespace selfSpace
{

class myButton;

class myButton : public QPushButton
{
    Q_OBJECT
public:
    myButton(QWidget*paret = 0);
    ~myButton();
};

}

#endif // MYBUTTON_H

mybutton.cpp

#include "mybutton.h"

namespace selfSpace
{

myButton::myButton(QWidget*parent) : QPushButton(parent)
{
}

myButton::~myButton()
{
}

}   //namespace selfSpace

自定义槽函数

自定义槽函数声明

class mainPage : public QWidget
{
    Q_OBJECT
public:
    mainPage(QWidget *parent = 0);
    ~mainPage();
/***********************槽函数*****************************/
//槽函数可以有参数,可以被重载!!
public slots:		//public slots: -> 允许与任何信号连接
    void Slot_a(void);
private slots:		//private slots: -> 只允许类中的信号与槽连接
    void Slot_b(void);
};

自定义信号

class subPage : public QWidget
{
    Q_OBJECT
public:
    subPage(QWidget *parent = 0);
    ~subPage();
public slots:
    void Slot_b1Down();
signals:					//信号函数必须要用signals:
    void Signal_b1Down();	//信号函数不能有返回值,不需要函数的实现!!
};

//可以使用 emit Signal_name();发送信号

自定义信号重载

声明

signals:
    void Signal_b1Down();
    void Signal_b1Down(int,QString);

连接

	//对于重载的信号,可以使用强制类型转换来告诉编译器使用的是哪个信号!! 函数指针!!
    // 返回值 (域名::*)(参数1,参数2,...)
    connect(subP,(void(subPage::*)())subPage::Signal_b1Down,this,Slot_ShowMain);
    connect(subP,(void(subPage::*)(int,QString))subPage::Signal_b1Down,this,Slot_Qdebug);
    //上面是QT5 版本的连接函数
    //以下使用QT4版本的连接函数
    //SIGNAL & SLOT ---> 宏,将函数名转换为字符串,然后由编译器在类中查找对应函数
    //相比于QT5 它不需要在函数名前加入域名
    //connect(subP,SIGNAL(Signal_b1Down()),this,SLOT(Slot_ShowMain()));
    //connect(subP,SIGNAL(Signal_b1Down(int,QString)),this,SLOT(Slot_Qdebug(int,QString)));

QT中常用API函数

connect()

槽与信号的关联函数

//connect -> 信号与槽的链接函数,一个模板函数
    //connect(信号来源(sender),信号(single),this(接收信号的对象),信号处理函数(槽slot),类型(type,默认赋值QT::AutoConnection));
//QPushButton::clicked -> 函数指针
//myWidget::close -> 函数指针 ,继承与QWidget
    connect(b1,QPushButton::clicked,this,myWidget::close);
//对于自定义的槽函数,槽函数的参数要与信号函数参数一致!!
//自定义槽函数可以是全局函数,类方法,静态函数,lamda表达式
connect(b2,QPushButton::clicked,this,myWidget::ResetName);

//QT4:
//SIGNAL & SLOT ---> 宏,将函数名转换为字符串,然后由编译器在类中查找对应函数
//相比于QT5 它不需要在函数名前加入域名
//这种连接方式不具备监测能力!!不推荐	
connect(subP,SIGNAL(Signal_b1Down()),this,SLOT(Slot_ShowMain()));
connect(subP,SIGNAL(Signal_b1Down(int,QString)),this,SLOT(Slot_Qdebug(int,QString)));

UI结构

Ui::MainWindow != MainWindow

Ui::MainWindow继承Ui_MainWindow (默认纯继承)

Ui::MainWindow.h会将mainwindow.ui中的图形转化为C++语言!

class Ui_MainWindow
{
public:
    //根据ui文件中的构件生成对应实例
    QWidget *centralWidget;
    QPushButton *pushButton;
    QPushButton *pushButton_2;
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QStringLiteral("MainWindow"));
        MainWindow->resize(400, 300);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QStringLiteral("centralWidget"));
        pushButton = new QPushButton(centralWidget);
        pushButton->setObjectName(QStringLiteral("pushButton"));
        pushButton->setGeometry(QRect(120, 120, 80, 20));
        pushButton_2 = new QPushButton(centralWidget);
        pushButton_2->setObjectName(QStringLiteral("pushButton_2"));
        pushButton_2->setGeometry(QRect(230, 180, 80, 20));
        MainWindow->setCentralWidget(centralWidget);
        menuBar = new QMenuBar(MainWindow);
        menuBar->setObjectName(QStringLiteral("menuBar"));
        menuBar->setGeometry(QRect(0, 0, 400, 22));
        MainWindow->setMenuBar(menuBar);
        mainToolBar = new QToolBar(MainWindow);
        mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
        MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
        statusBar = new QStatusBar(MainWindow);
        statusBar->setObjectName(QStringLiteral("statusBar"));
        MainWindow->setStatusBar(statusBar);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", Q_NULLPTR));
        pushButton->setText(QApplication::translate("MainWindow", "aaa", Q_NULLPTR));
        pushButton_2->setText(QApplication::translate("MainWindow", "sadasd", Q_NULLPTR));
    } // retranslateUi

};

串口模块

QT += serialport

QList<QSerialPortInfo> Usart::GetSerialPortList()
{
    PortCount = QSerialPortInfo::availablePorts().length();     //获取可连接的com口
    //foreach(variables ,container)
    //qt对c++的拓展 按顺序遍历container容器中的variable项
    //QSerialPortInfo::availablePorts() 静态方法 返回QList<QSerialPortInfo> 即QSerialPortInfo的列表
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        qDebug()<<info.portName()<<info.description();
    }
    qDebug()<<PortCount;
    return QSerialPortInfo::availablePorts();
}

QObject

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 07:51:17  更:2022-05-08 07:54:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:38:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码