Qt学习—Day3

对话框QDialog

  • 模态对话框:不可以对其他窗口进行操作

  • 非模态对话框:可以对其它窗口即进行操作

模态对话框:

connect(ui->actionnew,&QAction::triggered,[=](){
        //创建模态对话框
        QDialog dlg(this);
        dlg.exec();   //阻塞
});

非模态对话框:

connect(ui->actionnew,&QAction::triggered,[=](){
        //创建非模态对话框
//        QDialog dlg(this);
//        dlg.show();    //会一闪而过,因为在栈上
        QDialog * dlg = new QDialog(this); //写到堆区
        dlg->show();   //不会一闪而过
        //设置属性,释放对话框
        dlg->setAttribute(Qt::WA_DeleteOnClose);
});

消息对话框QMessageBox

  • 错误提示critical

QMessageBox::critical(this,"critical","错误!");

效果:

  • 信息提示information

QMessageBox::information(this,"information","信息提示");

效果:

  • 询问提示question

//参数1:父窗口  参数2:标题  参数3:中间显示文本  参数4:按键类型  参数5:关联回车按键  后面两个有默认值可以不写
if(QMessageBox::Save == QMessageBox::question(this,"question","询问!",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
{
     qDebug()<<"选择的是保存";
}else{
     qDebug()<<"选择的是取消";
}

效果:

  • 警告warning

QMessageBox::warning(this,"warning","警告!");

效果:

其他对话框

颜色对话框QColorDialog

  • 可以选择颜色,默认白色,返回值为QColor类型

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

效果:

字体对话框QFontDialog

        bool ok;
        QFont font = QFontDialog::getFont(&ok,QFont("宋体",24));
        qDebug()<<"字体:"<<font.family()<<"字号:"<<font.pointSize()<<"加粗:"<<font.bold()<<"倾斜:"<<font.italic();

效果:

文件对话框QFileDialog

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

效果:

登录界面

步骤:

  1. 巧用widgets做布局:水平、垂直、栅格

  1. 巧用弹簧进行设置

  1. widgets框太大不好看的情况下

  1. 上下左右间隙

  1. 固定窗口尺寸:最小尺寸和最大尺寸相等

  1. 设计窗口效果

常用控件

  1. Button可以加图片 icon

  1. Tool Button只能放图片或者文字

  1. Radio Button 单选按钮——如果想要选择两组不同的(例如性别和婚姻情况,可以先用Group Box),想要默认先选择某一个选项,去代码中修改

//默认选中男
ui->rBtn_man->setChecked(true);
//监听用户选择女的选项
connect(ui->rBtn_women,&QRadioButton::clicked,[=](){
    qDebug()<<"选中女生";
});
  1. CheckBox复选按钮,也可以用Group Box

//监听选中状态
connect(ui->checkBox,&QCheckBox::stateChanged,[=](int state){
    qDebug()<<state;  //选中的是2  未选中的是0
});

QListWidget控件

    //listWidget使用
    QListWidgetItem *item = new QListWidgetItem("锄禾日当午");
    ui->listWidget->addItem(item);
    //设置文本的对齐方式
    item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);

    //QStringlist -> QList<QString> -> list<string>
    QStringList list;
    list<<"锄禾日当午"<<"汗滴禾下土"<<"谁知盘中餐"<<"粒粒皆辛苦";

    ui->listWidget->addItems(list);

效果:

用到的知识点:setTextAlignment

QTreeWidget控件

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

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

    //treewidget 树控件
    //1、设置头的标签
    ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");

    //2、Item创建
    QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList()<<"力量");
    //添加顶层级别的Item
    ui->treeWidget->addTopLevelItem(liItem);

    QTreeWidgetItem * minItem = new QTreeWidgetItem(QStringList()<<"敏捷");
    ui->treeWidget->addTopLevelItem(minItem);

    QTreeWidgetItem * zhiItem = new QTreeWidgetItem(QStringList()<<"智力");
    ui->treeWidget->addTopLevelItem(zhiItem);

    QStringList heroL1,heroL2,heroM1,heroM2,heroZ1;
    heroL1<<"扁鹊"<<"中路英雄,一身毒,不小心就会被毒死";
    heroL2<<"小乔"<<"中路英雄,一把扇子走天下";

    //3、创建子Item 挂载到顶层Item上
    QTreeWidgetItem *l1 = new QTreeWidgetItem(heroL1);
    liItem->addChild(l1);

    QTreeWidgetItem *l2 = new QTreeWidgetItem(heroL2);
    liItem->addChild(l2);
}

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

效果展示:

QTableWidget表格控件

做一个王者荣耀英雄基本信息的表格,要求有姓名、性别、年龄,并且能添加新英雄安琪拉

会使用到tablewidget里的findItems函数,添加某一行可以用tablewidget中的insertRow函数,删除某一行可以用removeRow函数

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

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

    //tablewidget的使用
    //1、先设置列数
    ui->tableWidget->setColumnCount(3);
    //2、设置水平表头标签
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
    //3、设置行数
    ui->tableWidget->setRowCount(5);

//    ui->tableWidget->setItem(0,0,new QTableWidgetItem("亚瑟"));

    QStringList nameList,sexList;
    nameList<<"亚瑟"<<"妲己"<<"扁鹊"<<"艾琳"<<"李信";
    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]));
        //int 转 QString
        ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(18+i)));
    }

    //点击添加安琪拉 实现添加
    connect(ui->btn_add,&QPushButton::clicked,[=](){
        //如果有安琪拉,就不添加
        bool isEmpty = ui->tableWidget->findItems("安琪拉",Qt::MatchExactly).isEmpty();
        if(!isEmpty)
        {
            QMessageBox::warning(this,"警告","已经有安琪拉,添加失败");
        }
        else
        {
            ui->tableWidget->insertRow(0);
            ui->tableWidget->setItem(0,0,new QTableWidgetItem(QString("安琪拉")));
            ui->tableWidget->setItem(0,1,new QTableWidgetItem(QString("女")));
            ui->tableWidget->setItem(0,2,new QTableWidgetItem(QString::number(17)));
        }
    });

    //点击删除
    connect(ui->btn_del,&QPushButton::clicked,[=](){
        bool isEmpty = ui->tableWidget->findItems("安琪拉",Qt::MatchExactly).isEmpty();
        if(isEmpty)
        {
            QMessageBox::warning(this,"警告","没有安琪拉,删除失败");
        }
        else
        {
            int row = ui->tableWidget->findItems("安琪拉",Qt::MatchExactly).first()->row();  //找到第一个安琪拉位置
            ui->tableWidget->removeRow(row);
        }
    });
}

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

效果:

其他控件

  • Scroll Area:滚动条

  • Tool Box:类似QQ主页(家人、陌生人)

  • Tab Widget:类似网站开发

  • Stacked Widget:切换的网页(可以把上边的几个控件都放进去,然后来回切换),但是需要其他控件的支持,如PushButton。查看ui中的currentIndex(),使用connect()来实现

  • Combo Box:下拉框,想要添加下拉选项用addItem(),里边也用setCurrentIndex()来确定选项的位置,或者用文本来确定位置setCurrentText()

  • Line Edit:输入密码时想要隐藏文本,可以点击echoMode中的NoEcho(看不见)或者Password(都是点)

  • Label:可以放文字或图片  ui->label_Img->setPixmap(QPixmap(":/Image/picture.png"));      也可以指定图片大小:setFixedSize(pix.width(),pix.height());      也可以放置动图gif:label_movie,movie->start()播放gif

停止gif播放的代码:

connect(movie,&QMovie::frameChanged,[=](int frameId){
    if(frameId == movie->frameCount()-1)
    {
        movie->stop;
    }
});

自定义控件的封装

  1. 创建一个设计师界面类(右键)

会生成.h .cpp .ui三个界面

  1. 在ui文件中设计自己的自定义控件

  1. 在主窗口中拖拽一个Widget做提升:右键提升为,提升的名称为上边设计师界面的名字,提升成功右边对象和类中会变成提升的名字。

  1. 上一步完成结束后,运行会有自己定义的控件。

  1. 自定义控件的功能

  • smallwidget.h中

  • smallwidget.cpp中

  • widget.cpp中

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值