QT开发 Day2

一、内置对话框

1.消息对话框

依附于lambda表达式进行,可以直接调用静态函数,大致格式

connect(ui->action_new,&QAction::triggered,[=](){
    //错误对话框
    QMessageBox::critical(this,"提示","错误");
    });

错误对话框:QMessageBox::critical(this,"提示","错误");
警告对话框:QMessageBox::warning(this,"warning","wrong");
信息对话框:QMessageBox::information(this,"提示","信息");
提问对话框:参数:1父亲,2对话框标题,3提示内容,4按键类型,5默认关联回车按键QMessageBox::question(this,"提示","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel);
保存相应操作:

if(QMessageBox::Save == QMessageBox::question(this,"提示","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
{
    qDebug()<<"选择保存";
}
else
{
    qDebug()<<"选择取消";
}

2.文件对话框

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

  connect(ui->action_new,&QAction::triggered,[=](){
        QString str = QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\27569\Desktop",("*.txt"));
        qDebug()<<str;
    });

3.颜色对话框、字体对话框(略)

二、窗口布局

1.weghit 布局: 水平布局,垂直布局,栅格布局(类似表格)
2.利用弹簧进行布局:fixed

三、控件

在代码中实现对控件的修改=>objectname中找到名字=>代码进行修改

1.按钮组

名称功能
pushbutton存放文字
toolbutton存放图片(图片+文字:toolbuttonstyle中进行修改;autoraise透明化处理)
radiobutton单选按钮
groupbox分组控件
checkBox多选项按钮

与信号和槽相联系:

 connect(ui->Button1,&QRadioButton::clicked,[=](){
        qDebug()<<"1";
    });

    connect(ui->checkBox_S,&QCheckBox::stateChanged,[=](int state){
        //state选中是2,未选中是0
        if(state == 2)
        {
            qDebug()<<"选中";
        }
        else
        {
            qDebug()<<"取消";
        }

    });

运行结果:
请添加图片描述

2.listweight控件

向记事本中添加内容:

//申请字符串链表
QStringList a;
    a<<"1111"<<"2222"<<"3333";
    ui->listWidget->addItems(a);

3.treeweight控件

功能语法
设置水平头setHeaderLabels
加载顶层结点addTopLevelItem
追加子节点addChild
//设置水平头
    ui->treeWidget->setHeaderLabels(QStringList()<<"s"<<"u");

    QTreeWidgetItem * item1 = new QTreeWidgetItem(QStringList()<<"一");
    QTreeWidgetItem * item2 = new QTreeWidgetItem(QStringList()<<"二");
    QTreeWidgetItem * item3 = new QTreeWidgetItem(QStringList()<<"三");

    //加载顶层结点
    ui->treeWidget->addTopLevelItem(item1);
    ui->treeWidget->addTopLevelItem(item2);
    ui->treeWidget->addTopLevelItem(item3);

    //追加子节点
    QTreeWidgetItem * it1 = new QTreeWidgetItem(QStringList()<<"sss:"<<"asdfg");
    QTreeWidgetItem * it2 = new QTreeWidgetItem(QStringList()<<"vvv:"<<"asdfg");

    item1->addChild(it1);
    item1->addChild(it2);

运行结果:
请添加图片描述

4.tableweight控件

设置列数setColumnCount
设置水平表头setHorizontalHeaderLabels
设置行数setRowCount
设置正文setItem

//设置列数
    ui->tableWidget->setColumnCount(3);
    //设置水平表头
    ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"一"<<"二"<<"三");
    //设置行数
    ui->tableWidget->setRowCount(5);
    //设置正文
    QStringList namelist1;
    namelist1<<"aa"<<"bb"<<"cc"<<"dd"<<"ee";
    QStringList namelist2;
    namelist2<<"1"<<"0"<<"0"<<"1"<<"1";
    QStringList namelist3;
    namelist3<<"222"<<"333"<<"444"<<"555"<<"666";
    for(int i=0;i<5;i++)
    {
        int col = 0;
        ui->tableWidget->setItem(i, col++, new QTableWidgetItem(namelist1[i]));
        ui->tableWidget->setItem(i, col++, new QTableWidgetItem(namelist2[i]));
        ui->tableWidget->setItem(i, col, new QTableWidgetItem(namelist3.at(i)));

    }

运行结果:
请添加图片描述

四、封装自定义控件

1.添加新文件:qt => 设计师界面类
2.在ui中合并控件
3.weight中使用自定义控件:拖拽一个weight控件=>右键=>提升=>把自定义文件名写入
4.实现功能:改变数字两者一起移动;设置一般值,获取值
xiaobujian.h

void setNum(int num);
int getNum();

xiaobujian.cpp

void xiaobujian::setNum(int num){
    ui->spinBox->setValue(num / 2);
}

int xiaobujian::getNum(){
    int n = ui->spinBox->value();
    return n;
}

widget.cpp

 xiaobujian::xiaobujian(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::xiaobujian)
{
    ui->setupUi(this);
    //qspinbox移动qslider跟着移动
    void(QSpinBox:: *p)(int)=&QSpinBox::valueChanged;
    connect(ui->spinBox,p,ui->horizontalSlider,&QSlider::setValue);
    //QSliderx移动QSpinBox跟着改变
    connect(ui->horizontalSlider,&QSlider::sliderMoved,ui->spinBox,&QSpinBox::setValue);


}

void xiaobujian::setNum(int num){
    ui->spinBox->setValue(num / 2);
}

int xiaobujian::getNum(){
    int n = ui->spinBox->value();
    return n;
}
    });

运行结果:
请添加图片描述

五、鼠标事件

1.鼠标进入void enterEvent(QEvent *event);
2.鼠标离开void leaveEvent(QEvent *event);
3.鼠标按下virtual void mousePressEvent(QMouseEvent *ev);
4.鼠标释放virtual void mouseReleaseEvent(QMouseEvent *ev);
5.鼠标移动virtual void mouseMoveEvent(QMouseEvent *ev);
自定义字符串
QString tmp = QString("x=%1 y=%2").arg(ev->x()).arg(ev->y());
判断鼠标左右键状态
点击和释放是瞬间的过程,而移动是持续的过程,对于移动状态左右键的判断要用&if(ev->buttons() & Qt::LeftButton),瞬间过程用==if(ev->button()==Qt::LeftButton)
设置鼠标追踪(鼠标不摁就可监听)

mylabl::mylabl(QWidget *parent) : QLabel(parent)
{
    //设置鼠标追踪(鼠标不摁就可监听)
    setMouseTracking(true);
}

应用举例:

mylabl::mylabl(QWidget *parent) : QLabel(parent)
{
    //设置鼠标追踪(鼠标不摁就可监听)
    //setMouseTracking(true);

}
void mylabl::enterEvent(QEvent *event){
    qDebug()<<"in";
}
void mylabl::leaveEvent(QEvent *event){
    qDebug()<<"out";
}
void mylabl::mousePressEvent(QMouseEvent *ev){
    qDebug()<<"press";
}
void mylabl::mouseReleaseEvent(QMouseEvent *ev){
    if(ev->button()==Qt::LeftButton){
        qDebug()<<"left release";
    }
}
void mylabl::mouseMoveEvent(QMouseEvent *ev){
    //自定义字符串
    //点击和释放是瞬间的过程,而移动是持续的过程,对于移动状态左右键的判断要用&
    if(ev->buttons() & Qt::LeftButton){//实现只有左键按下才返回值
        QString tmp = QString("x=%1 y=%2").arg(ev->x()).arg(ev->y());
        qDebug()<<tmp;
    }
}

运行结果:
请添加图片描述
注意:提升时基类的名称要保证对应
请添加图片描述
请添加图片描述
请添加图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值