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);//显示
}
评价:功能不太科学,挺鸡肋的一个小程序。。。哭笑不得的表情