文章目录
非简答题
- Qt的风格类的基类是
QStyle
类。 - Qt中提供了
QThread
线程类。 - Qt支持
GIF
格式图像,但是无法实现存储
。 - Q_OBJECT是
宏定义
,如果类里面用到了signal,必须要声明这个宏
。 - 使用定时器,可以使用
QObject类
的定时器(QObject::startTimer()) - QObject对象树是一个
静态的QObjectList类对象object_trees
。 - 实现Qt多线程的方式:
(1):继承QThread
,实现多线程(实现run函数)
(2):继承QObject
,使用moveToThread
函数实现多线程
(3):使用ThreadPool
,搭配QRunnable
。 - new运算符的描述
(1):new是一个关键字,不同于malloc函数
(2):使用new创建对象时,会调用类的构造函数
(3):new可以用来动态创建对象和对象数组
(4):new和delete搭配使用,new创建的对象通过delete关键字释放。 - 类的构造函数被自动调用执行的情况发生在
定义该类的对象时
- Qt可在多个平台应用程序中完全应用模板(
跨平台
) - Qt增加的特性有有效的对象通信
signal
和slot
、可查询和可设计对象
、事件及事件过滤器
。 - Qt内部对
字符集
的处理采用UNICODE
标准 - 当用户在窗口部件上放下一个对象时,就会调用
dropeEvent()
show()
显示的对话框是无模式对话框
。用exec()
显示的对话框是模式对话框
- 槽可以是
虚函数
,可以是公有的
,保护的
也可以是私有的
。 - FindDialog(QWidget *parent=0);
父参数为NULL
,说明没有父控件。 - Qt支持的图像格式有:
PNG、BMP、XPM
- 槽是普通成员函数
- 定时器的精度依赖于
系统及硬件设计
。 - 窗口部件的父类包括
QWidget、QFrame、QScrollView
。 - 事件处理方法的有
重载QApplication::notify()、QObject::event()、Qt基类事件处理函数
- MVC模式中
M
表示Model,V
表示View,C
表示Controller - 设置QLabel对象显示文本内容的方法是
show()
- 使用QTimer对象开始计时的方法是
start()
- Qt的GraphicsView框架主要包含了三个主要类,分别是:
QGraphicsScene、QGraphicesView、QGraphicesItem
。 - Qt标准输入对话框提供了4种数据类型的输入,
int、字符串、double、下拉列表条目
. - Qt中常用的布局管理器有
QHBoxLayout、QVBoxLayout和QGridLayout等
(水平布局,垂直布局,栅格布局
) - Qt中常用的标准对话框有:
FileDialog、ColorDialog、FontDialog
。 - connect有
3
种连接方式,直接,队列和自动连接
。
简答题
Qt Designer设计一个对话框主要步骤
- 创建窗体并添加需要的控件
- 对窗体进行布局管理
- 设置控件的标签顺序
- 创建信号与槽
- connect连接信号与槽
列举出信号和插槽的用法
- 一个信号连接多个槽(1对多)
例:connect(silder,SIGNAL(valuechanged (int) ),spinBox, SLOT(setValue(int))
- 多个信号连接同一个槽(多对1)
例:connect(lcd, SIGNAL(overflow (int) , this , SLOT(handMathError(int)))
- 一个信号连接另一个信号 (gay)
例:connect(lineEdit , SIGNAL(textchanged(const QString&)), this, SLOT(updataRecord(const QString&)))
- 移除连接(disconnect)
例:disconnect(lcd, SIGNAL( overflow (int)), this, SLOT(handMathError(int)))
Qt中窗口对象的父子关系如何指定及指定父对象有什么好处
指定方法
:通过构造函数中的QWidget *parent
参数进行指定。
重要作用
:
1.父对象show的时候会递归调用其所有子对象,让它们都显示出来
2.父对象被销毁时会递归调用销毁其所有子对象,让内存管理变得简单
Qt中文件流(QTextStream)与数据流(QDatastream)的区别
文件流(QtextStream)
操作轻量级数据(int,double,QString),写入的数据类型转换为可读的文本
数据流(QDataStream)
通过数据流可以操作各种数据类型,包括对象
,写入的数据根据类型转换为二进制
文件流,数据流都可以操作磁盘文件,也可以操作内存数据。通过流对象可以将对象打包到内存,进行数据传输。
编程题
就按老师的来吧,我没真测试代码
1. GUI下的QWidget应用程序
#include <QtGui/QWidget>
#include <QPushButton>
#include <QtGui>
int main(int argc, char **argv)
{
//必须用这个(同时满足GUI和QWidget)
QApplication app(argc,argv);
QWidget *widget=new QWidget;
QPushButton *button=new QPushButton("Quit",widget);
QObject::connect(button,SIGNAL(clicked()),widget,SLOT(close()));
widget->show();
return app.exec();
}
2. UI与Dialog操作
编写main文件,假设ui的名字为gotocelldialog.Ui
#include <QApplication>
#include <QDialog>
#include "ui_gotocelldialog.h"
int main(int argc,char **argv)
{
QApplication app(argc,argv);
//创建gotocelldialog的ui对象
Ui::GotoCellDialog ui;
QDialog *dialog=new QDialog;
ui.setupUi(dialog);
dialog->show();
return app.exec();
}
3.Qt实验二
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QTextCodec>
Widget::Widget(QWidget *parent)
:QWidget(parent), ui(new Ui::Widget)
{
connect(ui->File_btn, SIGNAL(clicked()),[=](){
QString filepath =QFileDialog::getFileName(this ,"xxxx(default filepath)");
ui->File_PathEdit->setText(filepath);
QFile file(filepath);//打开文件
file.open(QIODevice::ReadOnly);
QByteArray array;
while(!file.atEnd()){
array+=file.readLine();
}
ui->textEdit->setText(array);
file.close();
//QFileinfo info(filepath) ,这个看自己吧,想写就写
});
}
4. C++运算符重载,与拷贝构造函数
#include <iostream>
#include <string.h>
class MyString{
char *str;
public:
MyString(char *s){
str=new char[strlen(s)+1];//注意区分sizeof与strlen
strncpy(str,s,strlen(s));
}
MyString(const MyString &temp){
str=new char[strlen(temp.str)+1]; //这里是&(引用)不要使用->
strncpy(str,temp.str,strlen(temp.str));
}
MyString & operator =(const MyString &temp) //类比 A = B
{
delete this->str; //释放原来的空间
this->str=new char[strlen(temp.str)+1];
if(this->str){
strncpy(this->str,temp.str,strlen(temp.str));
}
return *this; //返回该对象
}
~MyString(){
delete str;
}
}; //分号别忘了
5.信号与槽的使用
#include <QApplication>
#include <QHBoxLayout>
#include <QSpinBox>
#include <QSlider>
#include <QtGui>
int main(int argc,char **argv)
{
QApplication app(argc,argv); //实例化app
QWidget *widget=new QWidget;
widget->setWindowTitle("Enter your age"); //设置窗口标题
QSpinBox *spinbox=new QSpainBox;
QSlider *slider=new QSlider(Qt::Horizontal);//水平放置
ptr_spinbox->setRange(0,130);
ptr_slider->setValue(32);//随便设置
QObject::connect(ptr_spinbox,SIGNAL(valueChanged(int)), ptr_slider, SLOT(setValue(int)));
QObject::connect(ptr_slider,SIGNAL(valueChanged(int)), ptr_spinbox, SLOT(setValue(int)));
//进行水平布局
QHBoxLayout* layout=new QHBoxLayout;
layout->addWidget(spinbox);
layout->addWidget(slider);
widget->setLayout(layout);
widget->show();
return app.exec();
}
最好还是自己手写一下