Qt自学开发5_菜单复选框猜数游戏

本文探讨了Qt中QTextEdit的赋值与获取方法,QPushButton的checkable特性,ToolButton菜单按钮的应用,QCheckBox与QRadioButton的使用技巧,以及如何利用QTime生成随机数并应用于猜数游戏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20200524

【QTextEdit】

      1. 设置:1.1 文本形式赋值  1.2 html格式赋值

      2. 获取:2.1 文本形式  2.2 html格式

#include <QDebug>

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

    //设置
    //第一种:文本形式赋值
    ui->textEdit->setText("11111");

    //第二种 html格式赋值
    ui->textEdit->setHtml("<strong>22222</strong>");

    //获取
    //第一种 文本形式
    qDebug()<< ui->textEdit->toPlainText()<<endl;

    //第二种 html格式
    qDebug()<<ui->textEdit->toHtml()<<endl;
}

结果显示:

 

Qt常用部件及相关函数

【QPushButton】中的checkable()功能演示

(1)*.ui中添加Button

(2)设置  ui->pushButton->setCheckable(true); //设置为true

(3)connect绑定,添加槽函数的声明(*.h)及定义(*.cpp)

    connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(doProcessClicked(bool)));//bool
void Widget::doProcessClicked(bool ret){
    qDebug()<<ret<<endl;
}

效果如下:

若是注释这句话: //ui->pushButton->setCheckable(true); 

则点击Button,显示结果均为false。

应用:播放器的播放与暂停true/false

 

————————————分割线————————————

 

【Tool Button】菜单按钮——失败!!!

失败的尝试,我按他说的实践,并没有预期效果

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

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

    //设置图标
    ui->toolButton->setIcon(QIcon("../20200524/edit.PNG"));//当前目录上一层
    ui->toolButton->setIconSize(QSize(70,50));//设置图标大小

    QMenu *menu = new QMenu(this);  

    QAction *a1 = menu->addAction(QIcon("../20200524/copy.PNG"),"复制",this,SLOT(doProcess()));  //添加动作节点Action
    a1->setObjectName("复制");    //指针a1,赋对象名

    menu->addAction(QIcon("../20200524/cut.PNG"),"剪切",this,SLOT(doProcess()));
    menu->addAction(QIcon("../20200524/paste.PNG"),"粘贴",this,SLOT(doProcess()));
    menu->addAction(QIcon("../20200524/copy.PNG"),"其他1",this,SLOT(doProcess()));
    menu->addAction(QIcon("../20200524/copy.PNG"),"其他2",this,SLOT(doProcess()));

    ui->toolButton->setMenu(menu);  //菜单下拉列表,出现小三角符号
}

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

//头文件里添加槽 void doProcess();
void Widget::doProcess(){
    //     qDebug() << "ssssss" << endl;//打印输出

    QAction *action = (QAction *)this->sender();

    qDebug() << action->objectName() << endl;//获取对象名
    qDebug() <<action->text() << endl;//获取文本名
}

预期效果:点击出现复制、剪切、粘贴

实际效果:Tool Button 点击不出来

 

【QCheckBox】复选框按钮

Radio Button  单选按钮:多选一

Check Box  复选按钮:可选取多个值

 

clicked  鼠标点击        toggled跟clicked差不多,也是触发的

pressed  鼠标按下去

released 鼠标释放

 

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

    //绑定RadioButton和CheckBox,头文件中添加2个槽
    connect(ui->rBtn_Man,SIGNAL(clicked(bool)),this,SLOT(doProcessRadioButton()));
    connect(ui->rBtn_Woman,SIGNAL(clicked(bool)),this,SLOT(doProcessRadioButton()));

    connect(ui->cBox_Bsktb1,SIGNAL(clicked(bool)),this,SLOT(doProcessCheckBox()));
    connect(ui->cBox_Vlb2,SIGNAL(clicked(bool)),this,SLOT(doProcessCheckBox()));
    connect(ui->cBox_Ftb3,SIGNAL(clicked(bool)),this,SLOT(doProcessCheckBox()));
}

//单选框RadioButton槽的实现
void Widget::doProcessRadioButton(){
    QRadioButton * rbtn = (QRadioButton *)this->sender();
    
    //如果选中,就打印;如果没选中,就不打印;
    if(rbtn->isChecked())
        qDebug()<<rbtn->text()<<endl;
}

//复选框CheckBox槽的实现
void Widget::doProcessCheckBox(){
    QCheckBox *cbox = (QCheckBox *)this->sender();
    //如果选中,就打印;如果没选中,就不打印;
    if(cbox->isChecked())
        qDebug()<<cbox->text()<<endl;//输出文本
}

实现效果如下图所示:(*.ui文件中把“RadioButton男”的checked属性打勾

 

————————————分割线————————————

20200525

怎样使用随机数函数?

*.ui布局:9个给PushButton,1个textEdit,1个lcdNumber。

把QTextEdit的readOnly只读属性打勾

 

QTime获得一个随机数

 qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//用当前时间设置种子

//以0时0分0秒到现在的秒数为种子

再调用全局的qrand()函数得到一个随机数

 

有无种子的区别测试如下:

运行效果如下:运行两次程序,所产生随机数不同

如果没有种子(注释qsrand一行),情况如下图所示:两次程序启动产生的随机数一样

(拓展应用——老虎机时钟:内部供电,外部供电。)

 

————————————分割线————————————

目标:生成随机数,你来猜:过大?过小?正确!

实现代码如下:

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

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    Init();//调用
}

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

void Widget:: Init(){

    num=0;//num是全局变量。静态变量的初始化是0
    currentNum.clear();

    //1.产生种子
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); //secsTo是int类型返回值,强制转换为unsigned int类型

    //2.接收全局变量
    num=rand()%100;    //模,100以内的随机数。
    qDebug()<<num<<endl;

    //绑定
    connect(ui->btn0,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
    connect(ui->btn1,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
    connect(ui->btn2,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
    connect(ui->btn3,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
    connect(ui->btn4,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
    connect(ui->btn5,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
    connect(ui->btn6,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
    connect(ui->btn7,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
    connect(ui->btn8,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
    connect(ui->btn9,SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));

}

void Widget::doProcessClickNum(){
    QPushButton *btn = (QPushButton *) this->sender();//指针类型
    if(btn == NULL)
        return;

    QString msg;
    QString text = btn->text();//按钮文本

    if(currentNum.length()<1)
    {
        currentNum.append(text);//追加文本
    }
    else if(currentNum.length()==1){
        currentNum.append(text);//追加文本

        //比较(用int类型比较)
        int v1 = currentNum.toInt();

        if(v1 < num){
            msg.append("输入的值过小!");
        }
        else if(v1 == num){
            msg.append("猜数正确!");
            num=qrand()%100;//重新生成随机数
        }
        else {
            msg.append("输入的值过大!");
        }
        ui->textEdit->append(msg);
        currentNum.clear();//清空
    }
    else{
        currentNum.clear();//清空
    }

   ui->lcdNumber->display(currentNum);//显示
}

评价:功能不太科学,挺鸡肋的一个小程序。。。哭笑不得的表情

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卢奕冰2017

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

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

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

打赏作者

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

抵扣说明:

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

余额充值