QT复习1

常用的qt库

描述
QMenuBar>菜单栏
QMenu>菜单栏
QAction>菜单栏
QtDebug>
QToolBar>工具栏
QPushButton>按钮
QStatusBar>状态栏
QLabel>标签
QTextEdit>核心控件
QDockWidget>浮动窗口
QDialog>对话框
QMessageBox>信息窗口
QFileDialog>文件窗口

备注:选中函数,按下f1可以打开帮助文档。选中值,按下f4可以跟随其去向。

入门,信号与槽

  • 例子
    • connect(&b1, &QPushButton::pressed, this, &MainWindow::close);
    • 参数1:按钮b1的地址
    • 参数2:按钮函数,当按钮按下时回应
    • 参数3:回应的目标
    • 参数4:调用的函数
      • 课堂笔记
        • * &b1:信号发出者,指针类型
        • * &QPushButton::pressed:处理的信号, &发送者的类名::信号名字
        • this:信号接收者
        • * &MainWindow::close 槽函数, 信号处理函数 &接收者的类名::槽函数名字

补充:槽函数需要和信号一致(参数,返回值)
由于信号都没有返回值,所有槽函数一定没有返回值

槽函数 :接收短信的手机
信号:短信
效果
  1. 为了防止产生二义性,应该采用指针函数
void (subwindow::*funSignal)() = &subwindow::mySingnal;//指针函数,防止二义性
connect(&subwin, funSignal, this, &MainWindow::dealsub);

void (subwindow::*testSignal)(int, QString) = &subwindow::mySingnal;
connect(&subwin, testSignal, this, &MainWindow::dealSlot);
//同样的mysignal函数,通过指针传入参数的数量来区分函数

Lambda表达式

例子与笔记

//Lambda表达式,匿名函数对象
//c++增加的特性:项目文件:CONFIC += C++11
//Qt配合信号使用

QPushButton *b4 = new QPushButton(this);
b4->setText("Lambda表达式");
b4->move(150,150);
connect(b4, &QPushButton::clicked,
// = : 把外部所有局部变量,类中所有成员以值传递
//this:类中所有成员以值传递方式
// & : 把外部所有局部变量, 引用符号(当内存没释放会输出乱码)
[=](bool isCheck) mutable//表示花括号里面的值可被修改(默认只显示)
{
qDebug() << isCheck;
}
);

QT内存分配机制

  1. 1)指定父对象 2)直接或间接继承与Object
  2. 子对象如果是动态分配空间new,则不需要手动释放系统会自动释放

带注释的源码,方便直接分析学习

//源码1
#include "mainwindow.h"
#include <QMenuBar>//菜单栏
#include <QMenu>//菜单栏
#include <QAction>//菜单栏
#include <QtDebug>
#include <QToolBar>//工具栏
#include <QPushButton>
#include <QStatusBar>//状态栏
#include <QLabel>//标签
#include <QTextEdit>//核心控件
#include <QDockWidget>//浮动窗口
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(500,500);
//菜单栏
QMenuBar *mBar = menuBar();
//添加菜单
QMenu *pFile = mBar->addMenu("文件");
//添加菜单项:添加动作
QAction *pNew = pFile->addAction("新建");
connect(pNew,&QAction::triggered,
[=]()
{
qDebug() << "新建被按下";
}
);
pFile->addSeparator();//添加分割线
QAction *pOpen = pFile->addAction("打开");
//工具栏,菜单项的快捷方式
QToolBar *toolBar = addToolBar("toolBar");
//工具栏添加快捷键
toolBar->addAction(pNew);//添加动作(括号内为为指针)
QPushButton *b = new QPushButton(this);
b->setText("!_!");
//添加小控件
toolBar->addWidget(b);
connect(b,&QPushButton::clicked,
[=]()
{
b->setText("123");
}
);
//状态栏
QStatusBar *sBar = statusBar();
QLabel *lable = new QLabel(this);
lable->setText("偷偷喜欢你");
sBar->addWidget(lable);
//addWidget,从左往右添加
sBar->addWidget(new QLabel("那个人",this));
//addPermanentWidget,从右往左添加
sBar->addPermanentWidget(new QLabel("嗯",this));
//核心控件
QTextEdit *textEdit = new QTextEdit(this);
setCentralWidget(textEdit);
//浮动窗口
QDockWidget *dock = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea,dock);
//添加浮动窗口控件
QTextEdit *textEdit1 = new QTextEdit(this);
dock->setWidget(textEdit1);
}
MainWindow::~MainWindow()
{
}

源码效果图:
在这里插入图片描述

//源码2
#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDialog>//对话框
#include <QtDebug>
#include <QMessageBox>//信息窗口
#include <QFileDialog>//文件窗口

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    QMenuBar *mBar = menuBar();
    setMenuBar(mBar);
    QMenu *menu = mBar->addMenu("对话框");

    QAction *p1 = menu->addAction("模态对话框");
    connect(p1,&QAction::triggered,
            [=]()
            {
                QDialog dig;
                dig.exec();//模态对话框,等待用户操作
                qDebug() <<"11111";
            }
            );

    QAction *p2 = menu->addAction("非模态对话框");
    connect(p2,&QAction::triggered,
            [=]()
            {
                //QDialog dig 移动至头文件
                dig.show();//非模态对话框,需要在头文件定义成员,否则因为不阻塞而不会显示
                qDebug() <<"11111";

                //QDialog *p = new QDialog(this);//设置局部变量,而且可以显示
                //p->show();

                QDialog *p = new QDialog;
                p->setAttribute(Qt::WA_DeleteOnClose);//释放内存,不会发送内存泄漏,第一种也一样
                p->show();
            }
            );

    QAction *p3 = menu->addAction("关于对话框");
    connect(p3,&QAction::triggered,
            [=]()
            {
                QMessageBox::about(this,"about","关于QT");//(父对象,标题,内容)
            }
            );

    QAction *p4 = menu->addAction("问题对话框");
    connect(p4,&QAction::triggered,
            [=]()
            {
                int ret = QMessageBox::question(this,
                                                "question","are you ok?",
                                                QMessageBox::Ok |
                                                    QMessageBox::Cancel);//指定选择按钮答案
                switch (ret)
                {
                case QMessageBox::Yes://标准选择模板
                        qDebug() << "i an OK";
                    break;
                case QMessageBox::Cancel:
                        qDebug() << "i am bad";
                    break;
                case QMessageBox::Ok:
                        qDebug() << "i am good";
                    break;
                default:
                    break;

                }
            }
            );

    QAction *p5 = menu->addAction("文件对话框");
    connect(p5,&QAction::triggered,
            [=]()
            {
                QString path = QFileDialog::getOpenFileName(
                            this,
                            "open",
                            "../",//上一级路径
                "source(*.cpp *.h);;Images (*.png *.xpm *.jpg);;"//;;是分隔符,其中是显示格式和筛选内容
                "Text files (*.txt);;XML files (*.xml)"
                            );
                qDebug() << path;
            }
            );
}

MainWindow::~MainWindow()
{
}


效果图:
在这里插入图片描述
点开对话框即可选择,都是一些基础应用

文章供初学者复习使用,主要是自己在用

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖半仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值