-
- 一、简答题(30分)
-
- 1.1 Qt Designer设计一个对话框主要步骤
- 1.2 列举出信号和插槽有几种用法
- 1.3 Qt中窗口对象的父子关系如何指定及指定父对象有什么作用及好处
- 1.4 QT中的文件流(`QTextStream`)和数据流(`QDataStream`)的区别
- 二、填空题(10分)
-
- 2.1 Connect有几种连接方式
- 2.2 Qt中的常用标准对话框
- 2.3 Qt中常用的布局管理器
- 2.4 Qt标准输入对话框提供了4种数据类型的输入
- 2.5 Qt的`GraphicsView`框架结构主要包含了三个主要的类,分别是
- 三、判断选择题(30分)
- 四、编程题(30分)
-
- 4.1 button实现
- 4.2 对话框实现
- 4.3 编写一个字符串处理的类
- 4.4 滑动组件(slider)和旋转框(spinbox)
- 4.5 QT文件操作
- ①创建窗体并在窗体中放置各种控件
- ②对窗体进行布局管理
- ③设置各空间的标签顺序
- ④创建信号和槽
- ⑤连接信号和槽
-
一个信号可以连接多个槽:connect(slider,SIGNAL(valuechanged(int)),spinBox,SLOT(setValue(int)))
-
多个信号连接同一个槽connect(lcd,SIGNAL(overflow(int))this,SLOT(handlMathError(int)))
-
一个信号可以与另外一个信号相连接connect(lineEdit,SIGNAL(textchanged(constQString&)),this,SLOT(updateRecord(constQString&)))
-
连接可以被移除disconnect(lcd,SIGNAL(overflow(int))this,SLOT(handlMathError(int)))
父子关系:
- 一般通过构造函数中的QWidget*parent参数指定窗口的父子关系
重要关系:
- 父对象show的时候会递归调用其所有子对象,让它们都显示出来。
- 父对象被销毁时会递归销毁其所有的子对象,让内存管理更加简单。
-
文件流 (QTextStream)。操作轻量级数据(int,double,QString)数据写入文本件中以后以文本的方式呈现。
-
数据流 (QDataStream)。通过数据流可以操作各种数据类型,包括对象,存储到文件中数据为二进制。
-
文件流,数据流都可以操作磁盘文件,也可以操作内存数据。通过流对象可以将对象打包到内存,进行数据的传输。
- 直接连接
- 队列连接
- 自动连接
- FileDialog
- ColorDialog
- FontDialog
- QHBoxLayout
- QVBoxLayout
- QGridLayout
- int类型的数据
- 字符串
- double类型
- 下拉列表框的条目
- QGraphicsScene
- QGraphicsView
- QGraphicsItem
-
使用QTimer对象开始计时的方法start()
-
设置QLabel对象显示文本内容的方法是show()
-
MVC的含义MVC模式中的M代表Model,V代表View、C代表Controller
-
事件处理方法的有重载QApplication::notify()、QObject::event()、Qt基类事件处理函数。
-
窗口部件的父类包括QWidget、Qframe、QScrollView
-
定时器精度依赖于系统及硬件设计
-
槽是普通成员函数
-
Qt支持的图像格式是:PNG、BMP、XPM
-
Q_OBJECT是宏定义,如果类里面用到了signal,必须要声明这个宏
-
FindDialog(QWidget*parent=0);父参数为NULL,说明没有父控件
-
槽可以是虚函数,可以是公有的,保护的,也可是私有的。
-
show()显示的对话框是无模式对话框。用exec()显示的对话框是模式对话框
-
当用户在窗口部件上放下一个对象时,就会调用dropEvent()
-
内部对字符集的处理采用UNICODE标准
-
QT增加的特性有效的对象通信signal和slot、可查询和可设计的对象、事件及事件过滤器
-
Qt可在多个平台的应用程序中完全应用模板
-
类的构造函数被自动调用执行的情况是在定义该类的对象时
-
new运算符的描述一般有:使用运算符new创建对象时,会调用类的构造函数;运算符new可以用来动态创建对象和对象数组;使用new运算符创建的对象可以使用运算符delete删除
-
实现Qt多线程方式有:继承QThread,实现多线程,继承QObject,使用moveToThread函数实现多线程,使用QThreadPool,搭配QRunnable
-
QObject对象树是一个静态的QObjectList类对象object_trees
-
使用定时器,可以用QObject类的定时器
-
Q_OBJECT是宏定义,如果类里面用到了signal,必须要声明这个宏
-
Qt支持GIF格式图像,但无法实现存储
-
Qt中提供了QThread线程类
-
Qt的风格类的基类是QStyle类
效果:
实现代码:
main.cpp
#include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget *pWidget=new QWidget; QPushButton *button=new QPushButton("Quit", pWidget) ; QObject::connect(button, SIGNAL(clicked() ) , pWidget, SLOT(close() ) ) ; pWidget->show(); return a.exec(); }4.2 对话框实现
效果:
实现代码:
(假设UI的名字为gotocelldialog. Ui)
main.cpp
include <QApplication> #include #include "ui_gotocelldialog. h" int main(int argc, char *argv[] ) { QApplication app(argc, argv) ; Ui: : GotoCellDialog ui; QDialog *dialog = new QDialog; ui. setupUi(dialog) ; dialog->show() ; return app. exec() ; }4.3 编写一个字符串处理的类
需求:
编写一个字符串处理的类,MyString,实现拷贝构造,‘=’号重载等基本函数:
实现代码:
MyString.h
#include class MyString { char *str; public: MyString(char *s) { str=new char [strlen(s)+1]; strcpy(this->str,s); } MyString(const MyString &temp) { str=new char[strlen(temp.str)+1]; strcpy(str,temp.str); } ~MyString() { delete str; } MyString & operator = (const MyString &temp) { delete[] this->str; this->str=new char[strlen(temp.str)+1]; if(this->str) { strcpy(this->str,temp.str); } return *this; } };4.4 滑动组件(slider)和旋转框(spinbox)
需求:
实现滑动组件(slider)和旋转框(spinbox)的用法
效果:
代码:
main.cpp
#include #include #include #include #include int main(int argc, char* argv[]) { QApplication app(argc, argv) ; //创建 app 的构造函数 QWidget *pWidget= new QWidget; //new 一个 Widget pWidget->setWindowTitle("enter your age") ; //设置 caption QSpinBox* spinbox = new QSpinBox; //new 一个 spinbox QSlider* slider = new QSlider(Qt:: Horizontal) ; //new 一个 slider spinbox->setRange(0, 130) ; //设置范围, ->符号 slider->setRange(0, 130) ; QObject:: connect(spinbox, SIGNAL(valueChanged(int) ) , slider, SLOT(se tValue(int) ) ) ; QObject:: connect(slider, SIGNAL(valueChanged(int) ) , spinbox, SLOT(se tValue(int) ) ) ; //信号和槽, (发送者, 信号, 接收者, 槽) . 第一个是 spinbox 发送给 slider 的 //第二个是 slider 发送给 spinbox 的 spinbox->setValue(23) ; //QHBoxLayout 是布局管理器, 即在水平方向上排列窗口部件 QHBoxLayout* layout = new QHBoxLayout; layout->addWidget(spinbox) ; layout->addWidget(slider) ; pWidget->setLayout(layout) ; pWidget->show() ; //窗体显示 return app. exec() ; }4.5 QT文件操作
效果:
mainwindow.cpp:
#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); connect(ui->pushButton,&QPushButton::clicked,[=](){ QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "C:\\data"); ui->label->setText(fileName); QFile file(fileName); file.open(QIODevice::ReadOnly); QByteArray array; while(!file.atEnd()) { array += file.readLine(); } ui->textEdit->setText(array); file.close(); }); } MainWindow::~MainWindow() { delete ui; }