【QT】实例五---绘图,计时器多线程,键盘响应,多窗口调用(暂未实现,待补),列表框和表格框

加法

直接在QT内开发

QString q1,q2,q3;
q1=ui->lineEdit_1->text();
q2=ui->lineEdit_2->text();
int n=q1.toInt()+q2.toInt();
q3=q3.sprintf("%d",n);
ui->lineEidt_3->settext(q3);

动画,绘图(QWidget)

随机产生5个点在屏幕上。
在这里插入图片描述

头文件:
在这里插入图片描述

#include <QPainter>
#include <cstdlib>
#include <ctime>

struct S
{
	int x,y;
}

//在class Widget内添加private S[5]
private:
	S ball[5];
	void draw();
protected:
	void paintEvent(QPaintEvent  *event)
 

.cpp文件:
在这里插入图片描述

void Widget::paintEvent(QPaintEvent *event)
{
    draw();
}
void Widget::draw()
{
    QPainter paint(this);//定义一个画笔对象,先画圈,再填充色
    QPen pen(QColor(255,255,255));//定义一个画笔。全满格。红绿蓝是白色
    QBrush brush(QColor(255,0,0));//定义一个画刷。
    paint.setPen(pen);
    paint.setBrush(brush);
    int i;
    for(i=0;i<5;i++)
    {
        ball[i].x=rand()%800;
        ball[i].y=rand()%600;
        paint.drawEllipse(ball[i].x,ball[i].y,20,20);
    }
}

void Widget::on_pushButton_clicked()
{
    update();
}

在这里插入图片描述

计时器,多线程(QWidget)

.h头文件

在这里插入图片描述

#include <QObject>//timer
#include <QDebug>//timer
#include <QTimerEvent>//timer

private:
    int n;
    int t;//timer
protected:
    virtual void timerEvent(QTimerEvent* ev);//计时函数

在这里插入图片描述

窗口初始化函数和timeEvent()函数

在这里插入图片描述

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    n=0;
    QString qs;
    qs=qs.asprintf("%d",n);
    ui->lineEdit->setText(qs);//设置初始0值
}
void Widget::timerEvent(QTimerEvent* ev)//timer
{
    if(ev->timerId()==t)//ev->timeId()就是距离上个的时间差
    {
        ++n;
        QString qs;
        qs=qs.asprintf("%d",n);
        ui->lineEdit->setText(qs);
    }
}

槽函数

void Widget::on_pushButton_clicked()
{
    t=startTimer(1000);//开始计时和停止后继续计时
}

void Widget::on_pushButton_2_clicked()
{
    this->killTimer(t);//停止计时
}

void Widget::on_pushButton_3_clicked()
{
    n=0;
    QString qs;
    qs=qs.asprintf("%d",n);
    ui->lineEdit->setText(qs);
}

在这里插入图片描述

键盘响应(键盘按钮使数字变化)

.h头文件

#include <QKeyEvent>

private:
    int n;
protected:
    virtual void keyPressEvent(QKeyEvent* ev);//接受按键,变化数字函数

在这里插入图片描述

.cpp文件

在这里插入图片描述

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    int n=0;
    QString s;
    s=s.sprintf("%d",n);
    ui->lineEdit->setText(s);
}

void Widget::keyPressEvent(QKeyEvent* ev)//接受按键,变化数字函数
{
    switch(ev->key())
    {
        case Qt::Key_Up:n=n-1;break;
        case Qt::Key_Down:n=n+1;break;
    }
    if(n<0)
        n=0;
    QString qs;
    qs=qs.asprintf("%d",n);
    ui->lineEdit->setText(qs);
}

多窗口调用

1、在编辑-forms上右击,选择:QT-QT设计师类,选择类别,起个名字,如ldm
在这里插入图片描述可以看到添加了一个dialog_2.ui
在这里插入图片描述

2、在原来的.h中包含ldm.h
#include "ldm.h"
在这里插入图片描述

3、对类ldm实例化

private:
    Ui::basedialog *ui;
    ldm* ldm1;

4、cpp

构造函数

{
    ui->setupUi(this);
     ldm1 = new ldm;
}

5、添加按钮响应函数

void basedialog::on_inputButton_clicked()
{
      ldm1->show();
}

列表框和表格框

列表框处理函数

listWidget()->currentRow();取行号。

ui->listWidget()->addItem(item);//添加item到列表框中
ui->lineEidt()->clear();//清除文本框
int row=ui->listWidget()->currentRow();//范围当前行数,是int型
ui->listWidget()->takeItem(row);//以int型行数作为参数,清除这个元素
ui->listWidget()->item(row)->setText()/->text();//以row行作为参数,取string和设置string。

列表框内容反馈给文本框

itemSelectionChanged()
在这里插入图片描述

void Dialog::on_listWidget_itemSelectionChanged()
{
    QString s;
    int row=ui->listWidget->currentRow();//获取当前行
    s=ui->listWidget->item(row)->text();//获取当前行内容
    ui->lineEdit->setText(s);
}

表格框

在这里插入图片描述表格框是tablewidget
在这里插入图片描述

添加按钮:
void Dialog_2::on_addButton_clicked()
{
    QString temp1,temp2;
    temp1=ui->lineEdit->text();
    temp2=ui->lineEdit_2->text();
    int row=ui->tableWidget->rowCount();//获取当前总行数,往后添加。
    ui->tableWidget->insertRow(row);//插入新行
    ui->tableWidget->setItem(row,0,new QTableWidgetItem(temp1));//第一个参数是行号,第二个参数是列号,第三个参数是*item,需要将temp1转为QTableWidget对象
    ui->tableWidget->setItem(row,1,new QTableWidgetItem(temp2));
    ui->lineEdit->clear();
    ui->lineEdit_2->clear();
}
修改按钮
    QString temp1,temp2;
    temp1=ui->lineEdit->text();
    temp2=ui->lineEdit_2->text();
    int row=ui->tableWidget->currentRow();//获得当前选中行
    ui->tableWidget->setItem(row,0,new QTableWidgetItem(temp1));
    ui->tableWidget->setItem(row,1,new QTableWidgetItem(temp2));
删除按钮

removeRow()删除行

void Dialog_2::on_delButton_clicked()
{
    int row=ui->tableWidget->currentRow();//获得行
    ui->tableWidget->removeRow(row);//removeRow(row)删除行
}
表格框内容选中反馈给文本框

不同于列表框,获得row之后,通过item(row)取到内容,这里需要借助行号和列号共同作用取内容:item(row,column)

void Dialog_2::on_tableWidget_itemSelectionChanged()
{
    int row=ui->tableWidget->currentRow();//取行号
    QString s1,s2;
    s1=ui->tableWidget->item(row,0)->text();//修改内容
    s2=ui->tableWidget->item(row,1)->text();
    ui->lineEdit->setText(s1);
    ui->lineEdit_2->setText(s2);
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值