栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

QT学习笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

QT学习笔记

目录

1.信号槽(按钮点击触发事件)

2.工具栏、菜单栏(代码添加方式)

3.资源文件(以图片为例)

4.控件学习

5.鼠标事件

6.QFile文件读写操作


1.信号槽(按钮点击触发事件)

信号连接的格式

参数1:信号的发送者 参数2:发送的信号(函数的地址) 参数3: 信号的接收者 参数4: 处理的槽函数

1)在发送者的头文件中编写信号signal

signals:
    //自定义信号,写在signal下
    //返回值是void,只需要声明,不需要实现
    //可以有参数,可以重载
    void hungry();
    void hungry(QString foodName);

2)在接收者的头文件中编写槽函数slot

public slots:
    //返回值是void,需要声明,也需要实现,也可以有参数,可以发生重载
    void treat();
    void treat(QString foodName);
};

 3)在窗口类的头文件中定义发送者、接收者和槽函数声明

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include "teacher.h"
#include "student.h"

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    Teacher * zt;
    Student * st;
    void classIsOver();
};

#endif // WIDGET_H

4)在窗口类的cpp文件中创建连接,实现槽函数(接收者的cpp文件也要实现槽函数)

#include "widget.h"
#include "ui_widget.h"
#include 

//Teacher 类 老师类
//Student 类 学生类
//下课,老师触发信号:饿了,学生响应信号:请客

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建一个老师对象
    this->zt=new Teacher(this);

    //创建一个学生对象
    this->st=new Student(this);

//    //创建连接
//    connect(zt,&Teacher::hungry,st,&Student::treat);

//    //下课
//    classIsOver();

    //连接带参数的信号和槽(出现重载的情况)
    void(Teacher:: *teacherSignal)(QString)=&Teacher::hungry;
    void(Student:: *studentSlot)(QString)=&Student::treat;
    connect(zt,teacherSignal,st,studentSlot);
    classIsOver();

    //按钮控制下课
    QPushButton *btn1 = new QPushButton;
    btn1->setParent(this);
    btn1->setText("下课1");
    btn1->move(100,100);
    connect(btn1,&QPushButton::clicked,this,&Widget::classIsOver);

    //信号连接信号
    QPushButton *btn2 = new QPushButton;
    btn2->setParent(this);
    btn2->setText("下课2");
    btn2->move(100,200);
    void(Teacher:: *teacherSignal2)(void)=&Teacher::hungry;
    void(Student:: *studentSlot2)(void)=&Student::treat;
    connect(zt,teacherSignal2,st,studentSlot2);
    connect(btn2,&QPushButton::clicked,zt,teacherSignal2);
}

void Widget::classIsOver(){
    emit zt->hungry("宫保鸡丁");
}

Widget::~Widget()
{
    delete ui;
}

2.工具栏、菜单栏(代码添加方式)
#include "mainwindow.h"
#include 
#include 
#include 

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent){
    resize(600,400);
    //1.菜单栏创建(最多有一个)
    QMenuBar * bar = menuBar();
    //将菜单栏放在窗口中
    setMenuBar(bar);
    //创建菜单
    QMenu * file=bar->addMenu("文件");
    QMenu * edit=bar->addMenu("编辑");
    //创建菜单项
    QAction *newAction=file->addAction("新建");
    //添加分隔符
    file->addSeparator();
    QAction *openAction=file->addAction("打开");

    //工具栏创建(可以有多个)
    QToolBar * tool = new QToolBar();
    addToolBar(Qt::LeftToolBarArea,tool);
    //工具栏中设置内容、添加控件
    tool->addAction(newAction);
    tool->addAction(openAction);
    QPushButton *btn = new QPushButton("aa",this);
    tool->addWidget(btn);
}

MainWindow::~MainWindow()
{
    delete ui;
}

3.资源文件(以图片为例)

将图片文件拷贝至项目位置下

右键项目->添加新文件->Qt->Qt resourse File

open in editor 编辑资源

添加资源 添加文件

使用 “:+ 前缀名 + 文件名 ”

资源文件过大时,在工程PRO文件中,添加:

CONFIG += resources_big

4.控件学习

1)Table Widget控件

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //TableWidget控件
    //设置列数
    ui->tableWidget->setColumnCount(3);
    //设置表头
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
    //设置行数
    ui->tableWidget->setRowCount(5);
    //设置正文
    QList nameList;
    nameList<<"张三"<<"李四"<<"王二"<<"麻子"<<"赵六";
    QList sexList;
    sexList<<"男"<<"女"<<"女"<<"男"<<"男";

    for(int i=0;i<5;i++){
        int col=0;
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList[i]));
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+18)));

    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

2)Stack Widget控件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //栈控件的使用
    //scrollArea按钮
    connect(ui->scrollArea_btn,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(0);
    });
    //toolBox按钮
    connect(ui->toolBox_btn,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(1);
    });
    //TabWidget按钮
    connect(ui->tabWidget_btn,&QPushButton::clicked,[=](){
        ui->stackedWidget->setCurrentIndex(2);
    });
    

}

MainWindow::~MainWindow()
{
    delete ui;
}

3)自定义控件封装

创建Qt设计界面类

 在.ui文件中,拉取所想要封装的控件,可在.h文件和.cpp文件中编写信号和槽

在主widget中使用该自定义控件:拖拽一个Widget,点击"提升为",点击"添加",点击"提升"

5.鼠标事件

新建类,以封装鼠标对某个控件的操作方法

例:myLable.cpp文件

#include "mylable.h"
#include 
#include 
myLable::myLable(QWidget *parent) : QLabel(parent)
{

}

//鼠标进入事件
void myLable::enterEvent(QEvent *event){
    qDebug()<<"鼠标进入了";
}
//鼠标离开事件
void myLable::leaveEvent(QEvent *event){
    qDebug()<<"鼠标退出了";
}
//鼠标按下事件
void myLable::mousePressEvent(QMouseEvent *event){
    QString str=QString("鼠标按下了 x = %1 y= %2").arg(event->x()).arg(event->y());
    qDebug()< 

6.QFile文件读写操作

类似C语言,唯套路耳

#include "widget.h"
#include "ui_widget.h"
#include 
#include 

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //点击选取文件按钮,弹出文件对话框
    connect(ui->pushButton,&QPushButton::clicked,[=](){
        QString path=QFileDialog::getOpenFileName(this,"打开文件","C:\Users\qq102\Desktop\secret");
        //将路径放入到lineEdit中
        ui->lineEdit->setText(path);
        //读取内容放入到textEdit中
        QFile file(path);//参数就是读取文件的路径
        //设置打开方式
        file.open(QIODevice::ReadOnly);
        QByteArray array = file.readAll();
        //将读取到的数据放入textEdit中
        ui->textEdit->setText(array);
        //对文件对象进行关闭
        file.close();

        //进行写文件
        file.open(QIODevice::Append);
        file.write("shit");
        file.close();
    });
}

Widget::~Widget()
{
    delete ui;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913349.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号