卷四:Qt第2篇-考试系统、元对象系统

1.考试界面;

(1)新增ExamDialog C++类,继承QDialog类。

ExamDialog::ExamDialog(QWidget *parent):QDialog(parent)
{}

(2)功能:考试计时:QTimer对象setInterval、start、connect方法响应事件与槽,字符串转数字。

void ExamDialog::initTimer()    ///2.考试界面-计时
{
    m_timeGo = 0;
        m_timer = new QTimer(this);
        m_timer->setInterval(1000);  //1000ms触发计时一次
        m_timer->start();  //启动
        //connect将信号与槽联系起来,m_timer信号,超时,对象,方法
        connect(m_timer,SIGNAL(timeout()),this,SLOT(freshTime()) );
}

void ExamDialog::freshTime()   ///2.考试界面-计时刷新方法
{
    //刷新考试用时
    m_timeGo++;
    //计算时间、
    QString min = QString::number(m_timeGo / 60); //整数转字符串,分钟
    QString sec = QString::number(m_timeGo % 60); //秒钟
    setWindowTitle("考试已用时:"+min+"分"+sec+"秒");
}

(2)考试界面布局:

①布局对象:setSpaceing、setMargin方法:

void ExamDialog::initLayout() {    3.初始化布局管理器
        m_layout = new QGridLayout(this); //父窗体
        m_layout->setSpacing(10);  //设置控件间间距,不需再计算了
        m_layout->setMargin(10);  //设置窗体与控件间隙
}

m_layout->addWidget(m_textEdit,0,0,1,10);  添加布局管理器的对象

②计时功能:整数转字符串函数、QTimr对象的start、connect方法。

③文件的读写:


bool ExamDialog::initTextEdit()    ///3.初始化文本框
{
    QString strLine; //保存问你件重读取到的数据
    QStringList strList;  //字符串链表,保存答案
    
    QString fileName("../exam.txt");
    QFile file(fileName);
    QTextStream stream(&file);
    
    stream.setCodec("UTF-8"); //设置编码

    if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        m_textEdit->setReadOnly(true);  //让出现的不能编辑修改
        m_textEdit = new QTextEdit(this);
        QString strText;  //显示到文本编辑器的数据
        int nLines = 0;
        while(!stream.atEnd()) {//过滤首行提示
            
    } else {
        return false;
    }

④当按钮判断是佛被选择时:m_radioA->setText("正确");

m_Groups->checkedButton()/ischecked()

⑤实现窗体的交互:一个窗口打开另一个关闭,done方法。

3.Qt项目的发布

(1)https://app.xunjiepdf.com”迅捷PDF转换器

(2)在release文件下要生成拷贝一些dll库,安装nsis,配置程序的安装(setup文件)和卸载功能;

4.Qt的容器

(1)QString、类型转换 str.toInt()、split分割返回字符串链表、拼接、str.mid(5,3)截取、compare比较、prepend起始位置插入、replace替换、trimmed去掉两端空格、startsWith查询字符;

(2)QStringList:遍历迭代器遍历、insert插入

(3)QList:链表  list<<1<<2; append(); 查找list.at(0)/list[2]; 修改list.replace 

(4)QVector:修replace、remove删除

(5)映射Qmap:键和值,通过键查值

(6)QHash:和map区别,数据存放无序的比map好

(6)QVarient:Qt的union类型,可以是各种类型

标准对话框:QMessageBox、QFileDialog(this,“提示”,".")、QColorDialog、QFontDialog字体对话框、QInputDialog输入对话框

正则表达式:元素、量词XX次、断言(开始 结尾)、通配符 QRegExp reg.exactMatch通配符类

5.Qt的元对象系统

(1)功能:Qt提供信号与槽机制、实时类型信息、动态属性系统;

(2)条件:继承自QObject、在类申明Q_OBJECT、元对象编译器moc;

(3)信号与曹的实现:connect(this,SIGNAL(Comen(QString &)),this,SLOT(ComenGuys(QString &))); //信号发送者, 发送信号,谁接受,槽方法、连接方式(默认是自动) 返回值是QMetaObject

其中:信号只需要申明,不需要定义,如:

signals:

void Comen(QString &str); 

槽方法要定义和申明,右键单间->转到槽,如:

private SLOT: 

         void ComenGuys(QString &str);   槽方法 要实现

也可止痒书写:connect(this,Lodin::Comen,this,Login::ComenGuys));

信号与槽可以一对多,但一般多个槽方法参数尽量一样多;  也可以多对一,不需要知道谁发的消息,索引很强的灵活性。

(4)foreach(QObject *obj,list) 循环访问链表、QDebug就是控制台输出;  //先搞项目、再讲原理

(5)动态属性:obj->proprety();方法、obj-> setProprety();方法

(6)对象树:父类会回收子类的资源,myLabel->deleteLater()销毁资源

(7)三个默认部件基类:QWidget、QMainWindow、QDialog;

①QWidget窗体:setWindowTitl、flags、resize()、widget.setWindowState(Qt::WindowMaximized/true)、阻不阻塞等;

②QMainWindow:菜单栏、工具栏、状态栏;

③QDialog:模态和非模态对话框,dlg.exet() 槽函数返回值1=accepted

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值