QT简答+大题+填空
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、创建一个窗体对象后,要想显示该窗体,需要调用对象的_show()______
方法,要想隐藏该窗体需要调用对象的__hide()_____方法。
2、MinGW 即Minimalist ____GNU_______For Windows,是将___GNU_开发工具移植到Win32 平台下的产物。
3 、Qt Creator 提供的默认基类只有QMainWindow 、_QWidget__ 和
__QDialog___________三种。
4 、在命令行编译程序时,其中使用命令qmake – project 的作用是:
_生成*.pro工程文件_;将.ui 文件编译成.h 文件时,使用了_Qt Designer编译工具。
5、使QTimer 对象开始计时的方法是__start()____。
6、信号与槽机制中,发射信号的关键字是_emit____________。
7、创建一个窗体对象后,要想显示该窗体,需要调用对象的__________方法,要想隐藏该窗体需要调用对象的_________方法。
8、使QTimer 对象开始计时的方法是______________。
9、设置QLabel 对象显示文本内容的方法是__setText()_。
10 、Qt 中的常用标准对话框有_颜色对话框__ 、_消息对话框_ 、
_输入对话框__。
11、Qt 中常用的布局管理器有_垂直布局管理器_、_水平……和_垂直布局管理器等。
12、Qt 的按钮控件是哪个类_QPushButton,标签是哪个类QLabel_,文本控件是哪个类QTextEdit_。
13、当某个事件出现时,通过发送_______信号___,可以将与之相关的_槽函数激活,即执行槽函数代码。
14、使用元对象编译器,将自定义类声明放在头文件中,并在第一句加上宏
__Q_Object________ ,使用qmake 工具生成_makefile_ ,则makefile 会自动调用__moc_工具对自定义信号和槽进行处理。
15、_用show()______显示的对话框是无模式对话框。
用_exec()______显示的对话框是模式对话
1、什么是Qt?有哪些优点?
Qt是一种跨平台的C++图形用户界面应用程序开发框架
优点:
1.优良的跨平台特性;面向对象;丰富的api;
2.支持2D/3D 图形渲染,支持OpenGL
3.大量的开发文档
2、Qt 中有哪些方式对窗体上的控件进行布局管理
绝对位置定位,手工布局,布局管理器
3、Qt有哪些特点?
轻型,占用资源少,高性能,高可靠性,便于移植,可配置
4、利用Qt Designer 设计一个对话框主要包括哪些步骤。
1)创建窗体并在窗体中放置各种控件。
2)对窗体进行布局设计。
3)设置各控件的标签顺序。
4)创建信号和槽。
5)连接信号和槽。
5、简述一下什么叫模态、非模态对话框,分别举例说明实现方法。
模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。
非模态(Modeless)对话框,又叫做无模式对话框,当用户打开非模态对话框时,依然可以操作其他窗口。
实现方法:
模态对话框:
void showModalWindow()
{
QWidget pWindow = new QWidget();
pWindow.exec();
}
非模态对话框:
Void showNModalWindow(){
QDialog pWindow = new QDialog();
pWindow.show();
}
6、描述一下Qt 中的信号和槽?其作用是什么?如何使用?
在Qt中,信号是一个特定的标识,是一种特殊类型的函数
槽是一个可以被调用用于处理特定信号的函数。
作用:当对象改动其状态时,信号就由该对象的动作发射(emit)出去,而槽用于接收信号的函数。
用于完成对象之间的通信。
使用方法:通过调用QObject对象的connect函数来将某个对象的信号和另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用,执行函数的功能。
7、Qt 中窗口对象的父子关系如何指定?指定父对象有什么作用及好处?
每个对象构建的时候都可以在构造函数中进行父对象的指定,同时也可以用setParent 的方式进行指定,
指定父对象的好处:
1、父对象在析构的时候,会连带子对象全部释放,如果非子对象则不进行析构,
就需要手动进行析构。
这样比较麻烦。
2、这样的析构处理只针对指针。
8、请列出QT 中的三种重要的布局管理器类名。
QGridLayout(网格)、QHBoxLayout(水平)、QVBoxLaybox(垂直)
9、实现一个事件过滤包括两个步骤?
(1)调用installEventFilter()注册需要管理的对象。
(2)在eventFilter() 里处理需要管理的对象的事件。
10、列举三种常见的事件。
鼠标双击、键盘按键、鼠标移动,滚轮滚动
编程题:
1、编写简单的留言簿,留言簿上显示的内容为:姓名、电话、邮箱、留言主题、留言内容。
//calllist.h:
#ifndef CALLLIST_H
#define CALLLIST_H
#include<QWidget>
#include<QLineEdit>
#include<QLabel>
#include<QPushButton>
#include<QGridLayout>
#include<QTextEdit>
class CallList:public QWidget
{
Q_OBJECT
public:
CallList(QWidget*parent=0);
~CallList();
private:
QLabel*lab_name;
QLabel*lab_tel;
QLabel*lab_mail;
QLabel*lab_msg_sub;
QLabel*lab_msg_con;
QLineEdit*line_name;
QLineEdit*line_tel;
QLineEdit*line_mail;
QLineEdit*line_msg_sub;
QTextEdit*line_msg_con;
QGridLayout*layout;
};
#endif//CALLLIST_H
//cellist.cpp:
#include"calllist.h"
CallList::CallList(QWidget*parent)
:QWidget(parent)
{
this->setGeometry(233,233,333,233);
this->lab_name=new QLabel("Name:",this);
this->lab_tel=new QLabel("Telephone:",this);
this->lab_mail=new QLabel("E-Mail:",this);
this->lab_msg_sub=new QLabel("Message Subject:",this);
this->lab_msg_con=new QLabel("Message Content:",this);
this->line_name=new QLineEdit(this);
this->line_tel=new QLineEdit(this);
this->line_mail=new QLineEdit(this);
this->line_msg_sub=new QLineEdit(this);
this->line_msg_con=new QTextEdit(this);
this->layout=new QGridLayout(this);
this->layout->addWidget(lab_name,0,0);
this->layout->addWidget(lab_tel,1,0);
this->layout->addWidget(lab_mail,2,0);
this->layout->addWidget(lab_msg_sub,3,0);
this->layout->addWidget(lab_msg_con,4,0);
this->layout->addWidget(line_name,0,1,1,4);
this->layout->addWidget(line_tel,1,1,1,4);
this->layout->addWidget(line_mail,2,1,1,4);
this->layout->addWidget(line_msg_sub,3,1,1,4);
this->layout->addWidget(line_msg_con,4,1,3,4);
}
CallList::~CallList()
{
}
//main.cpp:
#include"calllist.h"
#include<QApplication>
int main(int argc,char*argv[])
{
QApplication a(argc,argv);
CallList w;
w.show();
return a.exec();
}
2、应用可视化设计方法在Qt 中Designer 创建一个计算矩形面积的对话框,如图
所示:
//calrect.h
#ifndef CALRECT_H
#define CALRECT_H
#include<QWidget>
#include<QLineEdit>
#include<QPushButton>
#include<QLabel>
#include<QGridLayout>
#include<QString>
class CalRect:public QWidget
{
Q_OBJECT
public:
CalRect(QWidget*parent=0);
~CalRect();
private:
QLineEdit*lin_rect_long;
QLineEdit*lin_rect_wide;
QLineEdit*lin_rect_area;
QLabel*lab_rect_long;
QLabel*lab_rect_wide;
QLabel*lab_rect_area;
QPushButton*calbtn;
QPushButton*closebtn;
QGridLayout*layout;
private slots:
void calarea();
};
#endif//CALRECT_H
//calrect.cpp
#include"calrect.h"
CalRect::CalRect(QWidget*parent)
:QWidget(parent)
{
this->layout=new QGridLayout(this);
this->lin_rect_long=new QLineEdit(this);
this->lin_rect_wide=new QLineEdit(this);
this->lin_rect_area=new QLineEdit(this);
this->lab_rect_long=new QLabel("Input Long:",this);
this->lab_rect_wide=new QLabel("Input Wide:",this);
this->lab_rect_area=new QLabel("Rect Area=",this);
this->calbtn=new QPushButton("Calculate Area",this);
this->closebtn=new QPushButton("Close",this);
this->layout->addWidget(lab_rect_long,0,0);
this->layout->addWidget(lab_rect_wide,1,0);
this->layout->addWidget(lab_rect_area,2,0);
this->layout->addWidget(lin_rect_long,0,1,1,3);
this->layout->addWidget(lin_rect_wide,1,1,1,3);
this->layout->addWidget(lin_rect_area,2,1,1,3);
this->layout->addWidget(calbtn,0,4);
this->layout->addWidget(closebtn,1,4);
QObject::connect(this->closebtn,SIGNAL(clicked()),
this,SLOT(close()));
QObject::connect(this->calbtn,SIGNAL(clicked()),
this,SLOT(calarea()));
}
void CalRect::calarea(){
double rect_long=this->lin_rect_long->text().toDouble();
double rect_wide=this->lin_rect_wide->text().toDouble();
double rect_area=rect_long*rect_wide;
QString str=QString::number(rect_area);
this->lin_rect_area->setText(str);
}
CalRect::~CalRect()
{
}
//main.cpp
#include"calrect.h"
#include<QApplication>
int main(int argc,char*argv[])
{
QApplication a(argc,argv);
CalRect w;
w.show();
return a.exec();
}
3、编写代码实现:调用槽函数退出的quit 程序,要求:实现一个quit 按钮,写出完整的main()函数。
//quit.h:
#ifndef QUIT_H
#define QUIT_H
#include<QWidget>
#include<QPushButton>
class Quit:public QWidget
{
Q_OBJECT
public:
Quit(QWidget*parent=0);
~Quit();
private:
QPushButton*quitbtn;
};
#endif//QUIT_H
//quit.cpp:
#include"quit.h"
Quit::Quit(QWidget*parent)
:QWidget(parent)
{
this->quitbtn=new QPushButton("Quit",this);
QObject::connect(this->quitbtn,SIGNAL(clicked()),
this,SLOT(close()));
}
Quit::~Quit()
{
}
//main.cpp:
#include"quit.h"
#include<QApplication>
int main(int argc,char*argv[])
{
QApplication a(argc,argv);
Quit w;
w.show();
return a.exec();
}
6、利用QLineEdit、QPushButton、QTextEdit、QSpinBox 分别在堆中创建对象,
利用构造函数实现将所创建对象加入栅格布局管理器并应用。
假设一个空的Qt Gui项目已经建立好,写出需要增加的头文件,编写构造函数相关内容。
增加的头文件:
#include<QWidget>
#include<QSpinBox>
#include<QGridLayout>
#include<QLineEdit>
#include<QPushButton>
#include<QTextEdit>
类中声明:
private:
QSpinBox*spinbox;
QLineEdit*line;
QPushButton*btn;
QTextEdit*text;
QGridLayout*layout;
构造函数中内容:
this->spinbox=new QSpinBox(this);
this->line=new QLineEdit(this);
this->btn=new QPushButton("A Button",this);
this->text=new QTextEdit(this);
this->layout=new QGridLayout(this);
this->layout->addWidget(spinbox,0,0);
this->layout->addWidget(line,1,0);
this->layout->addWidget(btn,2,0);
this->layout->addWidget(text,3,0);。