实验三

#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);

 

 


 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值