#include <QtGui>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 在代码中可以使用中文字符串
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
// 新建QWidget类对象,默认parent参数是0,所以它是个窗口
QWidget *widget = new QWidget();
// 设置窗口标题
widget->setWindowTitle(QObject::tr("我是widget"));
// 新建QLabel对象,默认parent参数是0,所以它是个窗口
QLabel *label = new QLabel();
label->setWindowTitle(QObject::tr("我是label"));
// 设置要显示的信息
label->setText(QObject::tr("label:我是个窗口"));
// 改变部件大小,以便能显示出完整的内容
label->resize(180, 20);
// label2指定了父窗口为widget,所以不是窗口
QLabel *label2 = new QLabel(widget);
label2->setText(QObject::tr("label2:我不是独立窗口,只是widget的子部件"));
label2->resize(250, 20);
// 在屏幕上显示出来
label->show();
widget->show();
int ret = a.exec();
delete label;
delete widget;
return ret;
}
1、通过C++课本复习2.5节(自定义数据类型)、4.2,3,4节(类和对象基本语法、类的数据成员和成员函数、构造和析构函数、类的组合)、5.3节(类的静态成员)、6.6节(字符串)、7.1,3,4节(类的继承相关核心)内容,通过在Qt环境新建non-Qt项目实现这些章节中的代码。通过在Qt环境新建non-Qt项目写出练习代码并运行通过,记录过程中出现的各种编译器报错和运行期错误。
注意:如果没有带课本的话,可在http://www.runoob.com/cplusplus/cpp-tutorial.html上面找相应章节练习。
2、在网上查阅explicit关键字的用法,写代码证实explicit关键字的作用。回答三个问题:(1)explicit关键字的用法和语法用途。(2)为什么C++语言中要有explicit关键字,即它在编程应用中的意义。(3)为什么java语言可以没有这个关键字。
(1)
关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。
C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 2 是个默认且隐含的类型转换操作符。
所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器,创建一个AAA的对象。
explicit构造函数是用来防止隐式转换的。
(2)除了基本数据类型的类型转换,用户还可以为类类型定义类型转换。一个对象的的类型转换,需要通过创建一个无名的临时对象来完成。简单来讲,就是形式像“类型说明符(表达式)”的显式类型转换符号,就好比类型转换——将某一数据类型转换成为类类型对象的显示类型转换。
(3)自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以Java语言在设计时,没有为该操作设计语法,而是由JVM自动完成。
3、完成课本3.1节实验,试验5种不同的窗口类型和窗口标志组合。然后:按住Ctrl键,点击“QWidget”,查看Qt源码,注意到枚举的应用,然后在网上搜素enum关键字的相关资料,归纳enum关键字的用法,写示例代码运行。
注意:如果没有带课本的话,http://bbs.qter.org/forum.php?mod=viewthread&tid=11&extra=page%3D1 上面有创建窗体,就按照这个教程做,一定要注册一个用户,注册登陆后就可以看到教程中的图片了,否则会看不见教程中的图片。#include <QtGui>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//在代码中可以使用中文字符串
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
//新建QWidget类对象,默认parent参数是0,所以它是个窗口
QWidget *widget = new QWidget();
//设置窗口标题
widget->setWindowTitle(QObject::tr("我是widget"));
//新建QLabel对象,默认parent参数是0,所以它是个窗口
QLabel *label = new QLabel();
label->setWindowTitle(QObject::tr("我是label"));
//设置要显示的信息
label->setText(QObject::tr("label:我是个窗口"));
//改变部件大小,以便能显示出完整的内容
label->resize(180, 20);
//label2指定了父窗口为widget,所以不是窗口
QLabel *label2 = new QLabel(widget);
label2->setText(QObject::tr("label2:我不是独立窗口,只是widget的子部件"));
label2->resize(250, 20);
//在屏幕上显示出来
label->show();
widget->show();
int ret = a.exec();
delete label;
delete widget;
return ret;
}
QWidget *widget = new QWidget(0,Qt::Dialog);
QLabel *lable = newQLabel(0,Qt::SplashScreen);
将上面两行代码改为下面代码即产生无边框窗口:
QWidget *widget = newQWidget(0,Qt::Dialog|Qt:FramelessWindowHint);
QLabel *lable = newQLabel(0,Qt::SplashScreen|Qt:WindowStayOnTopHint);