【qt学习】网课笔记01:P0~P23

一、学习qt的方式:看书+网课

学习网站:http://c.biancheng.net/qt/

网课基础教程:https://www.bilibili.com/video/BV1g4411H78N?p=14

二、笔记

1.建工程建项目

      略略略

2.qt程序代码

前面几章的学习用代码写控件,后面用拖拽的方式做

button按钮、信号和槽:第一章学习代码:熟悉各种接口的调用。其他.h .cpp省略

//mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

class myWidget : public QWidget
{
    Q_OBJECT

public:
    myWidget(QWidget *parent = 0);
    ~myWidget();
};

#endif // MYWIDGET_H
//mywidget.cpp
#include "mywidget.h"
#include "mypushbutton.h"
#include <QPushButton>
#include <QDebug> //qDebug() -> printf()
myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
{
    //创建一个按钮
    QPushButton *butten1 = new QPushButton;
    //butten1->show();//show以顶层的方式弹出窗口控件
    butten1->setParent(this);//butten1依赖在myWidget中
    //显示文本
    butten1->setText("按钮1");


    //创建第二个按钮
    QPushButton *butten2 = new QPushButton("按钮2",this);
    butten2->move(100,0);//移动按钮
    //按钮的大小重置
    butten2->resize(100,50);

    //重置窗口大小
    resize(1500,1000);
    //设置固定窗口大小
    setFixedSize(500,300);//用户不可以拖拽窗口大小

    //设置窗口标题
    setWindowTitle("赵达伟的窗口");

    //定义一个我自己的按钮类
    myPushButton * button3 = new myPushButton;
    button3->setParent(this);
    button3->setText("My Button");
    button3->move(0,200);

    //信号和槽
    //参数:信号发送者,发送的信号(函数地址),信号接收者,处理的槽函数
    //connect(button3,button3->clicked,this,this->close);//
    connect(button3,&QPushButton::clicked,this,&myWidget::close);//两种方式都可以

}

myWidget::~myWidget()
{

}

0417 学习lambda表达式

自定义信号和槽,代码

//widget.h
#include <QPushButton>

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

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;

    Teacher *tea;
    Student *stu;

    void ClassOver();
};

#endif // WIDGET_H
//widget.cpp
#include "widget.h"
#include "ui_widget.h"

//Teacher类
//Student类
//需求:下课后老师触发信号(饿了),学生相应信号(买饭)


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

    //创建老师对象
    this->tea = new Teacher(this);
    //创建学生对象
    this->stu = new Student(this);

    //信号和槽的connect:老师饿了,学生说吃饭
    //connect(this->tea,this->tea->Hungry,this->stu,this->stu->Eat);
    //调用下课的函数
    //this->ClassOver();

    //信号和槽的connect:带参数
    //指针指向地址:函数指针
    void (Teacher:: *teacherSignal)(QString) = this->tea->Hungry;
    void (Student:: *studentSlot)(QString) = this->stu->Eat;
    connect(this->tea,teacherSignal,this->stu,studentSlot);
    //调用下课的函数
    //this->ClassOver();

    QPushButton *button1 = new QPushButton("下课",this);
    button1->resize(50,50);
    this->resize(500,250);
    //点击按钮 触发下课
    connect(button1,button1->clicked,this,this->ClassOver);


    QPushButton *button2 = new QPushButton("吃饭",this);
    button2->resize(50,50);
    button2->move(100,0);
    //无参信号
    void (Teacher:: *teacherSignal2)(void) = this->tea->Hungry;
    void (Student:: *studentSlot2)(void) = this->stu->Eat;
    connect(this->tea,teacherSignal2,this->stu,studentSlot2);
    //信号连接信号:点击按钮的信号 触发一个信号
    connect(button2,button2->clicked,this->tea,teacherSignal2);

    //断开信号
    //disconnect();

    //拓展
    //一个信号连接多个槽,多个信号可以连接一个槽
    //信号和槽的参数必须一一对应
    //信号的参数个数可以多余槽函数的参数

    //Qt4无参版本 连接无参版本
    connect(this->tea,SIGNAL(hungry()),stu,SLOT(Eat()));
    //Qt4版本优点:直观   缺点:类型不检测


    //0417 lambda表达式;mutable关键字用于修饰值传递的变量,修改的是开呗,而不是本体
    [=](){
        button1->setText("下课下课");
    }();
    //[]
    //() 重载参数

    int ret = []()->int{return 1000;}();
    qDebug() << "ret = " << ret;

    //利用lambda表达式 实现点击按钮关闭窗口
    QPushButton * button3 = new QPushButton(this);
    button3->setText("关闭");
    button3->move(200,200);
    connect(button3,button3->clicked,this,[=](){
        //关闭窗口
        this->close();
        //可以写多个函数:相当于一个信号触发多个槽函数
        button3->setText("已点击关闭");
    });

}


void Widget::ClassOver()
{
    //下课,触发老师饿了的信号
    //emit this->tea->Hungry();

    //带参数的信号
    emit this->tea->Hungry("米饭和鱼香肉丝");
}

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

0418   17:QMainWindow菜单栏工具栏

代码:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //重置窗口大小
    this->setWindowTitle("赵达伟的qt学习");
    resize(600,400);

    /*******************************************/
    //菜单栏:只能有一个
    QMenuBar* bar = menuBar();
    setMenuBar(bar);//空栏 不显示

    //创建菜单
    QMenu* fileMenu = bar->addMenu("文件");
    QMenu* editMenu = bar->addMenu("编辑");

    //创建菜单项
    QAction* fileMenu_new = fileMenu->addAction("新建");
    QAction* fileMenu_open = fileMenu->addAction("打开");
    QAction* editMenu_change = editMenu->addAction("修改");
    QAction* editMenu_add = editMenu->addAction("增加");
    //添加分隔线
    editMenu->addSeparator();
    QAction* editMenu_delete = editMenu->addAction("删除");

     /*******************************************/
    //工具栏
    QToolBar * toolbar = new QToolBar(this);
    addToolBar(Qt::LeftToolBarArea,toolbar);//将工具栏放置于左边

    //后期设置 只允许左右停靠
    toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    //设置浮动
    toolbar->setFloatable(false);

    //设置移动(总开关):如果这个false,所有的东西都关闭
    toolbar->setMovable(true);

    //工具栏中设置内容
    //toolbar->addAction();
    QAction* toolbar_1 = toolbar->addAction("工具栏1");
    toolbar->addSeparator();
    QAction* toolbar_2 = toolbar->addAction("工具栏2");
    toolbar->addSeparator();
    QAction* toolbar_3 = toolbar->addAction("工具栏3");
    //工具栏中添加控件

    QPushButton * but1 = new QPushButton("按钮1",this);
    toolbar->addWidget(but1);


     //0420状态栏 :最多一个
    QStatusBar * stBar = statusBar();
    //放置到窗口中
    setStatusBar(stBar);

    //放些标签控件
    QLabel *lab1 = new QLabel("左状态栏1",this);
    stBar->addWidget(lab1);

    QLabel * lab2 = new QLabel("右状态栏1",this);
    stBar->addPermanentWidget(lab2);

    //铆接部件(浮动窗口)
    QDockWidget* dockwidget = new QDockWidget("浮动窗口",this);
    addDockWidget(Qt::BottomDockWidgetArea,dockwidget);

    //设置中心部件 : 只能有一个
    QTextEdit * textedit = new QTextEdit(this);
    setCentralWidget(textedit);//设置了这个,上面的浮动窗口就到下面了,因为只能有一个中心;

}

MainWindow::~MainWindow()
{

}

资源文件

给按钮加个图标啦什么的,本例中在项目中添加一个图片的文件夹,将文件夹添加到项目中,使用的时候就还可以根据路径使用了。

代码

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

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

    //ui->actionnew->setIcon(QIcon("D:/Qt/MyProg/05SourceFile/addnew.png"));

    //添加资源文件
   //使用资源文件 ": + 前缀名+文件"
    ui->actionnew->setIcon(QIcon(":/Image/addnew.png"));



}

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

对话框

代码:

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

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


    //点击新建按钮,弹出一个对话框
    connect(ui->actionew,&QAction::triggered,[=](){
       //对话框:模态(不可以对其他窗口进行操作) 非模态(可以操作别的对话框)
        //QDialog dlg(this);
       // dlg.resize(200,100);
        //dlg.exec();
       // qDebug("模态对话框退出");

        //非模态对话框
        //QDialog * dlg2 = new QDialog(this);//这里用new 放在堆上;否则connect结束对象销毁
        //dlg2->resize(200,100);
       // dlg2->show();
        //dlg2->setAttribute(Qt::WA_DeleteOnClose);//关闭对话框后delete对象(55号 熟悉)


        //消息对话框
        //错误对话框
       // QMessageBox::critical(this,"critical","错误!");

        //信息对话框
       // QMessageBox::information(this,"title","信息");

        //提问对话框:参数:parent 标题 提示内容 按键类型 默认关联回车按键
//        if(QMessageBox::Save == QMessageBox::question(this,"请选择"," Are You OK?",QMessageBox::Yes|QMessageBox::Cancel,QMessageBox::Yes)  )
//        {
//            qDebug("用户选择了保存");

//            //...一堆操作
//        }
//        else
//        {
//            qDebug("用户选择了取消");

//            //...一堆操作
//        }


        //警告对话框
       // QMessageBox::warning(this,"警告","快跑!");

        //其他对话框
        QColor color = QColorDialog::getColor(QColor(255,255,255));
        qDebug() << color.red();

        //文件对话框 参数:1.parent 2.title 3.默认打开路径 4.过滤文件格式   返回值:路径
        QString str = QFileDialog::getOpenFileName(this,"打开文件title","D:\Qt\MyProg\05SourceFile\Image");

        //字体对话框
        bool flag = true;
        QFont font = QFontDialog::getFont(&flag,QFont("宋体",36));
        qDebug() << "字体:"<<font.pointSize()<<"字号:"<<font.pointSize();
    });
}

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

猜你喜欢

转载自blog.csdn.net/zDavid_2018/article/details/105651731
今日推荐