QT开发 Day1

一、窗口中添加按钮

1.首先在mainwindow.h文件中添加<QPushButton>
2.在MainWindow类声明两个QPushButton对象的指针

private:
    QPushButton *btn1;
    QPushButton *btn2;

3.在mainwindow.cpp文件中为QPushButton对象动态分配内存空间
4.对btn1,btn2做一些初始化

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    btn1 = new QPushButton("1",this);
    btn1->setIcon(QIcon("D:\\nk.png"));
    btn1->move(100,0);

    btn2 = new QPushButton;
    btn2->setParent(this);
    btn2->setText("2");
    btn2->move(200,200);
    btn2->resize(80,40);
}

二、窗口设置

MainWindow类中通过this指针+方法,对窗口进行设置

 this->setWindowTitle("我的程序");
 this->resize(600,800);

三、信号和槽函数

1.一个基础的信号和槽

语法connect(button, &QPushButton::clicked, this, &MainWindow::close);
参数:1.信号的发送者 2.发送的信号(函数地址) 3.信号接收者 4.处理的槽函数

参数注意事项
信号发出者此参数是一个指针
& + 信号发出者类的名字 + ::+ 信号的名字信号发出者内部的信号(查看帮助文档,找不到就在父类中查找)
this 信号接收者也是一个指针
& + 信号接收者类的名字 + ::+ 槽的名字信号接收者内部的信号

信号槽优点:信号的发送端与接收端本身是没有关联的,通过connect将两端耦合在一起

2.自定义槽

事例:点击btn1改变btn2中的文字内容
方法:
1.思路:让另一个对象接受btn1发出的信号,该对象改变btn2里的文本内容
2.引入自定义槽函数,该函数的作用是改变btn2中文字的内容
3.定义槽函数:
①在mainwindow.h文件中的class MainWindow类下声明该函数

public:
    //自定义槽函数
    void slot();

②在mainwindow.cpp文件中的MainWindow外实现该函数的改名操作

void MainWindow::slot()
{
    btn2->setText("改名");
}

③在mainwindow.cpp文件中的MainWindow内部建立信号和槽

 connect(btn1,&QPushButton::clicked,this,&MainWindow::slot);

注意事项:
1.槽函数需要与信号相对应
2.信号和槽没有返回值
3.两者传递的参数要一致
4.信号函数的参数传给槽函数

3.自定义信号

事例:在窗口一中按下按钮隐藏自己,显示另一个窗口(只能看见一个窗口)

预备操作

1.创建一个新的窗口类(选择c++ class,继承qweight)
2.子窗口头文件中创建按钮对象,并在cpp文件中实现

头文件

#include<QPushButton>
class subwindow : public QWidget
{
    Q_OBJECT
public:
    explicit subwindow(QWidget *parent = nullptr);
private:
    QPushButton *s1;

};

.cpp

subwindow::subwindow(QWidget *parent) : QWidget(parent)
{
    s1 = new QPushButton("返回主窗口",this);

    //创建窗口
    this->setWindowTitle("子窗口");
    this->resize(500,500);

    connect(s1,&QPushButton::clicked,this,&subwindow::myslot);
}

3.主窗口中创建一个按钮,并创建子窗口对象,为其动态分配内存
不要忘记#include"subwindow.h"

#include"subwindow.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

    QPushButton *p3;//切换窗口
    subwindow *obj1 = new subwindow;//子窗口对象
};

自定义信号的实现

目标:点击子窗口按钮,返回到主窗口
1.点击事件发生后,自定义的槽函数向主窗口发出信号emit + 信号();
子窗口头文件中声明发出信号的槽函数,同时为了让主窗口获取该信号,要自定义一个信号
信号可以为空

signals:
    void out();
public slots:
    void myslot();

.cpp文件中实现

void subwindow::myslot()
{
    //发送信号
    emit out();
}

2.主窗口接收信号
①定义一个实现子窗口关闭,主窗口打开的函数
mainwindow.h

void showME();

mainwindow.cpp中实现

void MainWindow::showME()
{
    obj1->hide();
    show();
}

②建立连接,最终实现

//接收out信号
connect(obj1,&subwindow::out,this,&MainWindow::showME);

注意:一个槽可以发出多个对象

四、QMainWindow

一、菜单栏、工具栏

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QMenuBar>
#include<QToolBar>
#include<QDebug>
#include<QPushButton>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
{
	//菜单栏创建(最多有一个)
    QMenuBar * bar = menuBar();
    //放入窗口(空栏不显示)
    setMenuBar(bar);
    //创建菜单
    QMenu *filemenu = bar->addMenu("文件");
    QMenu *editmenu = bar->addMenu("编辑");
    //创建菜单项
    QAction *action1 = filemenu->addAction("新建");
    //添加分隔符
    filemenu->addSeparator();
    filemenu->addAction("打开");

    //工具栏(可以有多个)
    QToolBar *tbar = new QToolBar;
    addToolBar(Qt::LeftToolBarArea,tbar);
    //允许左右停靠
    tbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    //设置移动(工具栏能否移动的总开关)
    //tbar->setMovable(false);

    //工具栏中设置内容
    tbar->addAction("打开");//未共用
    tbar->addSeparator();
    tbar->addAction(action1);//共用:QAction *action1 = filemenu->addAction("新建");

    //添加控件
    QPushButton *b = new QPushButton("保存", this);
    tbar->addWidget(b);
}

2.状态栏、标签控件、铆接控件(浮动窗口)、中心部件

    //添加控件
    QPushButton *b = new QPushButton("保存", this);
    tbar->addWidget(b);

    //状态栏(只有一个)
    QStatusBar * stbar =statusBar();
    //设置到窗口中
    setStatusBar(stbar);
    //存放标签控件
    QLabel *qlab = new QLabel("提示",this);
    stbar->addWidget(qlab);

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

    //设置中心部件
    QTextEdit * edt = new QTextEdit(this);
    setCentralWidget(edt);

五、使用添加qt资源:“:+ 前缀名 + 文件名”

步骤:
1.将图片资源复制到当前项目中: mainwindow.cpp 右键 + ”在explore中显示“,将文件复制进去
2.总项目中:右键 + “添加新文件” + qt + qt resourse file
3.res.qrc中:右键 + “open in edit” 添加资源
4.添加前缀:+ /
5.添加文件:选中并点击打开:/picture/nk.png是文件的路径

ui->action_new->setIcon(QIcon(":/picture/nk.png"));

六、模态对话框与非模态对话框的创建

模态对话框:阻塞效果,不可以对其他窗口进行操作

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    resize(600,800);
   //点击新建按钮弹出一个对话框
    connect(ui->action_new,&QAction::triggered,[=](){
        QDialog dia(this);
        dia.resize(200,100);
        //模态
        dia.exec();

    });
}

非模态对话框:可以对其他窗口进行操作
要点:堆区申请内存、释放内存防止泄露

QDialog *dia1 = new QDialog(this);//容易内存泄漏
        //防止内存泄漏Qt::WA_DeleteOnClose
        dia1->setAttribute(Qt::WA_DeleteOnClose);
        dia1->resize(200,100);
        dia1->show();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值