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