QT学习(3)——对话框,模态非模态,系统对话框,界面布局,其他控件

在这里插入图片描述

引出

QT学习(3)——对话框,模态非模态,系统对话框,界面布局,其他控件


模态方式

模态:不可对其他窗口操作;非模态:可操作;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>

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

    // 点击新建
    connect(ui->actionNew,&QAction::triggered,
            [=](){
        // 对话框分类,
        // 模态:不可对其他窗口操作;非模态:可操作;
        QDialog dlg(this);
        dlg.resize(200,200);
        dlg.exec();
        qDebug() << "模态对话框弹出,阻塞了";
    });
}

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

非模态方式

        // 非模态对话框
        QDialog *dlg2 = new QDialog (this);
        dlg2->resize(200,200);
        dlg2->show();
        dlg2->setAttribute(Qt::WA_DeleteOnClose);
        qDebug() << "非模态对话框弹出";

系统对话框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

消息框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>

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

    // 点击新建
    connect(ui->actionNew,&QAction::triggered,
            [=](){
        // 错误对话框
//        QMessageBox::critical(this,"错误","一个错误的弹窗");

        // 消息对话框
        // 参数1父亲 参数2标题 参数3提示内容 参数4按键类型 参数5默认关联回车按键
        QMessageBox::StandardButton choose = QMessageBox::question(
                    this,"选择","是否选择",QMessageBox::Save | QMessageBox::Cancel,
                    QMessageBox::Save);

        if(QMessageBox::Save==choose){
            qDebug() << "选择的是保存";
        }else {
            qDebug() << "选择的是取消";
        }
    });
}

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

颜色框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

        QColor color = QColorDialog::getColor(QColor(255,0,0));
        qDebug() << "color=" << color.red();

文件框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

        //文件对话框
        // 参数1父亲 参数2标题 参数3默认打开路径 参数4过滤文件格式
        //返回值是选取的路径

        QString str = QFileDialog::getOpenFileName(
                    this,"打开文件","D:\\MyFiles\\myLearn\\QT","(*.txt)");
        qDebug() << "filePath = " << str;

界面布局

利用布局方式给窗口进行美化
选取widget进行布局,水平布局、垂直布局、栅格布局
给用户名、密码、登陆、退出按钮进行布局:
默认窗口和控件之间有9间隙,可以调整layoutLeftMargin
利用弹篝进行布局

默认框框有9像素

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

密码的输入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

tool按钮

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单选框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多选框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

半选状态,需要进入如下的设置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

listWidget

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 单选按钮 男默认选中
    ui->rBtnMan->setChecked(true);

    // 选中女,打印
    connect(ui->rBtnWoman,&QRadioButton::clicked,this,
            [=](){
        qDebug() << "选中了女的";
    });

    // 多选
    connect(ui->checkBox,&QCheckBox::stateChanged,this,
            [=](int state){
        qDebug() << "多选框" << state;
    });

    // 利用listWidget写诗
//    QListWidgetItem *item = new QListWidgetItem("锄禾日当午");
//    // 将这一行放入控件中
//    ui->listWidget->addItem(item);
//    item->setTextAlignment(Qt::AlignHCenter);

    // QString
    QStringList list;
    list << "锄禾日当午" << "汗滴禾下土"
         << "谁知盘中餐" << "粒粒皆辛苦";
    ui->listWidget->addItems(list);

}

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

QTreeWidget

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

    // treeWidget树控件

    // 设置水平头
    ui->treeWidget->setHeaderLabels(
                QStringList() << "英雄"<< "英雄介绍"); // 匿名对象

    QTreeWidgetItem *itemL = new QTreeWidgetItem(QStringList() << "力量");
    QTreeWidgetItem *itemM = new QTreeWidgetItem(QStringList() << "敏捷");
    QTreeWidgetItem *itemZ = new QTreeWidgetItem(QStringList() << "智力");
    // 加顶层节点
    ui->treeWidget->addTopLevelItem(itemL);
    ui->treeWidget->addTopLevelItem(itemM);
    ui->treeWidget->addTopLevelItem(itemZ);

    // 追加自节点
    QStringList heroL1;
    heroL1 << "力量超强" << "很厉害";
    QTreeWidgetItem *l = new QTreeWidgetItem(heroL1);
    itemL->addChild(l);

}

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

QTableWidget

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#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(4);

    // 设置正文
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("张三"));

    QStringList nameList;
    nameList << "张三" << "李四" << "王五";

    QList<QString> sexList;
    sexList << "男" << "女" <<"男";

    for (int i=0;i <3 ;i++) {
        int col = 0;
        // nameList[i] 越界直接就挂了。
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
        // sexList.at(i) 越界抛出异常
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList.at(i)));
        //nt 转为Qstring: QString::number(i+18) i
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+18)));
    }
}

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

其他控件

stackedWidget

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

    // 栈控件的使用

    //默认页面
    ui->stackedWidget->setCurrentIndex(2);

    // scrollArea的使用
    connect(ui->btnHome,&QPushButton::clicked,
            [=](){
        ui->stackedWidget->setCurrentIndex(1);
    });
    connect(ui->btnPush,&QPushButton::clicked,
            [=](){
        ui->stackedWidget->setCurrentIndex(0);
    });
    connect(ui->btnTool,&QPushButton::clicked,
            [=](){
        ui->stackedWidget->setCurrentIndex(2);
    });

}

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

combox下拉框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 下拉框
    ui->comboBox->addItems(QStringList() << "宝马" << "奔驰" << "拖拉机");

    // 点击按钮
    connect(ui->selectTuo,&QPushButton::clicked,
            [=](){
        ui->comboBox->setCurrentIndex(2);
//        ui->comboBox->setCurrentText("拖拉机");
    });

label标签

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 图片
    ui->lbl_img->setPixmap(QPixmap(":/sw.png"));

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


总结

QT学习(3)——对话框,模态非模态,系统对话框,界面布局,其他控件

自定义信号和槽

1.自定义信号

写到signals下
返回void
需要声明,不需要实现
可以有参数,可以重戟

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.自定义槽

返回void
需要声明,也需要实现
可以有参数,可以重载
写到public slot下或者public或者全局函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.建立连接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

// 老师饿了,学生请吃饭
connect(te,&Teacher::hungry,st,&Student::treat);

4.进行触发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自定义信号重载

当自定义信号和槽出现重载
8.1 需要利用还数指针明确指向函数的地址·
8.2void(Teacher::tsignal )QString )=&Teacher::hungry;
8.3 QString转成char *
8.3.1.ToUtf80转为QByteArray
8.3.2.Data0转为Char *
8.4信号可以连接信号
8.5断开信号disconnect

带参数的

    void (Teacher::*teacherSignal)(QString) = &Teacher::hungry;
    void (Student::*StudentSlot)(QString) = &Student::treat;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void Student::treat(QString foodName){
    // QString -> char * 先转成QByteArray(.toUtf8())  再转成Char* ()
    qDebug() << "请老师吃。。。" << foodName.toUtf8().data();
}

按钮触发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 用一个按钮调用下课
    QPushButton *btn = new QPushButton("下课了",this);

    // 重置窗口daxiao
    this->resize(600,400);

    connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);

信号触发信号

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 无参的信号和槽连接
    void (Teacher::*teacherSignal2)(void) = &Teacher::hungry;
    void (Student::*StudentSlot2)(void) = &Student::treat;
    connect(te,teacherSignal2,st,StudentSlot2);

    // 信号连接信号
    connect(btn,&QPushButton::clicked,te,teacherSignal2);

断开信号disconnect

拓展

1、信号是可以连接信号
2、一个信号可以连接多个槽函数
3、多个信号可以连接同一个糟函数
4、信号和槽函数的参数必须类型一一对应
5、信号和槽的参数个数是不是要一致?信号的参数个数可以多余槽函数的参数个数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

connect(信号的发送者,发送的信号signal信号),信号接受者,槽函数SLOT)
优点:参数直观
缺点:编译器不会检测爸数类型:

lambda表达式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

在这里插入图片描述

    [=](){
        btn->setText("aaa");
    }();

返回值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

mutable修饰

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    QPushButton *myBtn1 = new QPushButton(this);
    QPushButton *myBtn2 = new QPushButton(this);
    myBtn1->move(100,100);
    int m = 10;
    connect(myBtn1,&QPushButton::clicked,this,
            [m]()mutable {m=100+10;qDebug()<< m;});
    connect(myBtn2,&QPushButton::clicked,this,
            [=](){qDebug()<<m;});
    qDebug() << m;

案例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    QPushButton * btnClose = new QPushButton;
    btnClose->setText("close");
    btnClose->move(100,0);
    btnClose->setParent(this);
    connect(btnClose,&QPushButton::clicked,this,
            [=](){
        btnClose->setText("关闭");
        emit te->hungry("娃哈哈");
//        this->close();
    });
  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Perley620

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

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

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

打赏作者

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

抵扣说明:

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

余额充值