QT 理论试题
1以下关于 QT 的描述正确的是 a. 是一个不跨平台的 C++图形用户界面 b. 由挪威 TrollTech 公司出品 c. 只支持 Unix、Linux d. QT API 和开发工具对所支持的平台是不一致的 2以下关于 QT 的描述不正确的是 a. QT 支持 2D 图形渲染 b. QT 支持 3D 图形渲染 c. QT 支持 OpenGL

d. QT 不支持 XML 3下关于不正确的是 a. 是面向嵌入式系统的 Qt 版本 b. 是 Qt 的嵌入式窗口 c. 基于 Windows 平台的开发工具 d. 是完整的自包含 C++ GUI 的开发工具 4内部对字符集的处理采用以下哪个标准 a. UNICODE b. ASCII c. GB2312 d. ISO 8859-1 5以下关于 Qt 描述不正确的是 a. 是基于面向对象的 C++语言 b. 提供了 signal 和 slot 的对象通信机制 c. 有可查询和可设计属性 d. 没有字符国际化 6以下描述正确的是 a. 标准的 C++对象模型可有效的支持运行时参数 b. 标准的 C++对象模型的静态特性十分灵活 c. 图形用户界面编程无需运行得高效 d. 图形用户界面编程无需运行得高灵活性 7以下不是 QT 增加的特性 a. 有效的对象通信 signal 和 slot b. 可查询和可设计的对象 c. 事件及事件过滤器 d. 不使用指针 8以下描述正确的是 a. 元对象系统可以对信号使用模板 b. 元对象系统可以对槽使用模板 c. Qt 可在多个平台的应用程序中完全应用模板 d. Qt 不能在多个平台的应用程序中完全应用模板 9以下关于 moc 叙述正确的是

a. moc 即 Mult Object Compiler b. 可产生能被任何标准 C++编译访问的附加 C++代码 c. moc 必须手动调用 d. 类声明中有无 Q_OBJECT 无所谓 10以下关于信号和槽的描述正确的是 a. 用于 SOCKET 网络通信 b. 用于 UDP 网络通信 e. 用于对象间通信 c. 用于串口通信 11以下关于信号/槽的叙述不正确的是 a. 信号与槽通过 connected 函数任意相连 b. 信号/槽机制在 QObject 类中实现 c. 从 QWidget 类继承的所有类可以包含信号和槽 d. 当对象状态变化时信号被发送对象不关心是否有其他对象接收到该信 号 12以下类声明中有几处错误 class M : public Qobject { Q_OBJECT public : M(); int value ( ) const { return va ; } public slots : void setValue ( int ) ; signals : void valueChanged ( int ) ; private: int va ; } a. 5 b. 4 c. 3 d. 2 13设有如下声明 void M : : setValue ( int v ) { if ( v = va ) { va = v ; emit valueChanged ( v ) ; } }

则对于如下语句 M a,b; connect ( &a , SIGNAL ( valueChanged ( int ) ) , &b , SLOT ( setValue ( int ) ) ) ; b.setValue ( 11 ) ; a.setValue ( 12 ) ; b.value ( ) ; 执行后值为 a. 11 11 b. 12 12 c. 11 12 d. 12 11 14以下关于槽的描述正确的是 a. 槽具有 public 和 protected 2 个类 b. protected slots 表示只有该类的子类的信号才能连接 c. 槽是普通成员函数 d. 不能有 private slots 15以下关于元对象系统不正确的是 a. 元对象系统只是用于处理对象间通信的信号/槽机制 b. 元对象系统可处理运行时的类型信息和动态属性系统 c. 元对象系统基于 Qobject 类 d. bc 都对 16不是元对象代码实现的特征的是 a. 提供信号/槽机制 b. Class.forName ( )在运行的时候返回类名称 c. tr ( )用于国际化中的字符串翻译 d. metaObject ( )返回该类所关联的元对象 17以下关于 Q_OBJECT 叙述不正确的是 a. 类定一种声明了 Q_OBJECT 后该类才能使用元对象系统相关的特性 b. Q_OBJECT 对所有类都无关紧要 c. QObject 的子类中未实现信号和槽也可使用 Q_OBJECT d. QObject 的子类中未实现属性也可使用 Q_OBJECT 18以下关于元对象编译器的叙述不正确的是 a. 元对象编译器不展开#define 但可展开#include b. 元对象编译器不展开#include c. 忽略遇到的所有预处理程序 d. 无法处理所有 C++语法 19有如下语句 class YourClass : public Qobject { Q_OBJECT public slots : void apply ( void ( *apply ) ( List * , void * ) , char * ) ; } 以下正确的是 a. 完全正确 b. 可以没有 Q_OBJECT

c. slots 关键字有误 d. 函数指针不能作为信号和槽的参数 20如下叙述不正确的是 a. 不能把继承的成员函数升级为共有状态 b. 宏不能用在信号和槽的参数中 c. 嵌套类不能放在信号部分 d. 嵌套类可以放在槽部分 21有如下声明 class Abc : public Qobject { ① Q_OBJECT ② public : ③ Q_PROPERTY(Priority priority READ priority setPriority ) ④ Q_ENUMS ( Priority ) enum Priority { High , Low , VeryHigh , VeryLow }; void setPriority ( Priority ) ; Priority priority ( ) const ; }; 关于属性声明的位置以下正确的是 a. 原位置正确 ① ② ③ ④ b. 原位置不正确应为 ① ③ ④ ② c. 原位置不正确应为 ① ③ ② ④ 22以下关于属性的叙述不正确的是 a. 基于元对象系统 b. 在类声明中用宏声明 c. 属性不是一个类的成员 d. 属性只能在继承于 QObject 的子类中声明 23以下关于 QObject 类叙述不正确的是 a. 是所有 Qt 对象的基类 b. QObject 对象树是一个静态的 QObjectList 类对象 object_trees c. object_trees 链表中存有部分对象指针 d. 通过 object_trees 链表可查询到所有的对象 24以下是事件处理方法的是 a. 重载 QApplication : : notify ( ) b. 重载 QObject : : event ( ) c. 重载 Qt 基类事件处理函数 d. 以上全是 25以下关于定时器的叙述不正确的是 a. 多数平台支持 2ms 精度的定时器 b. 使用定时器可以用 QTimer 类 c. 使用定时器可以用 QObject 类的定时器 d. 定时器精度依赖于操作系统和硬件 26以下关于 QObject 类定时器的叙述正确的是

WRITE

a. 当处理器正忙于其它事件的处理时定时器仍可以立即触发 b. 当定时器触发时应用程序会发送 QtimerEvent c. 用 startTimer ( )开始一个定时器如果成功则返回 0 d. 用 startTimer ( )开始一个定时器如果失败则返回-1 27以下是 QObject 提供的字符串翻译函数的选项是 a. translateit ( ) , trUtf8 ( ) b. translation ( ) c. tr ( ) , trUtf_8 ( ) d. tr ( ) , trUtf8 ( ) 28以下关于元对象的叙述不正确的是 a. 每个在类声明中含有 Q_OBJECT 宏的类都有一个对应的元对象 b. 每个在类声明中含有 Q_OBJECT 宏的类都有一个对应的 QMetaObject 类 对象 c. 元对象是动态的 d. 一个类可能含有多个元对象与之对应 29窗口部件的父类包括 a. QWidget b. QFrame c. QScrollView d. 以上全是 30以下关于 QWidget 类、QFrame 类和 QScrollView 类的关系叙述正确的是 a. 三个类是兄弟关系 b. 三个类是继承关系QWidget 为祖父QFrame 为父QScrollView 为子 c. 三个类是继承关系QFrame 为祖父QWidget 为父QScrollView 为子 d. 三个类是继承关系QFrame 为祖父QWidget 与 QScrollView 互为兄弟 31以下关于 Qt 风格叙述正确的是 a. Qt 的风格类的基类是 QStyle 类 b. QStyle 的多数成员函数即有声明也有实现 c. 其实现只能在 QCommonStyle 类中通过重载来完成 d. 其实现只能在 QWindowStyle 类中通过重载来完成 32关于布局功能的叙述以下正确的是 a. 在布局空间中布置子窗口部件 b. 设置子窗口部件间的空隙 c. 管理在布局空间中布置子窗口部件 d. 以上都对 33以下关于 QLayout 的描述不正确的是 a. 是的布局系统抽象基类 b. 其中属性 int margin 代表布局的外边框的宽度 c. 其中属性 int spacing 代表布局内的窗口部件的大小 d. 其中属性 ResizeMode resizeMode 代表布局的扩展方式 34布局窗口部件包括 a. QHBox b. QVBox c. QGrid

d. 以上全有 35以下叙述不正确的是 a. QHBox 允许子窗口部件按水平、垂直和网格排列 b. QVBox 允许子窗口部件按水平、垂直和网格排列 c. QGrid 允许子窗口部件按水平、垂直和网格排列 d. 以上全不对 36以下各项中是 QLayout 子类的是 a. QGridLayout b. QHBoxLayout c. QVBoxLayout d. b 和 c 37如果对默认放置位置不满意则须采取相应的措施以下哪项不是 a. 创建没有父布局的布局对象 b. 调用 addLayout ( )把这个布局插入到其他布局中 c. 没有办法 d. a 和 b 38以下关于集合类描述不正确的是 a. 它是装有多个条目的容器 b. 每个条目是某种数据结构 c. 集合类可对容器中的条目做插入操作 d. 集合类不能对容器中的条目做删除操作 39以下各项中属于基于值的集合类是 a. QCache b. QMap c. QPtrList d. QDict 40以下各项中属于基于指针的集合类的是 a. QIntCache b. QValueStak c. QValueVector d. QValueList 41以下各项中既不基于指针也不基于值的是 a. QIntDict b. QPtrList c. QPtrStack d. QMemArray 42所有基于指针的集合继承了如下哪个类 a. QGCache b. QGVector c. QPtrCollection d. QGList 43当插入一个条目到一个集合时如下不正确的是 a. 仅拷贝指针而不拷贝条目本身的称“浅拷贝” b. 不允许只拷贝指针而不拷贝条目本身

c. 拷贝所有条目的数组到集合中是可能的 d. 选项 C 又称“深拷贝” 44以下各项中不是与 Qt 线程相关的类的是 a. QMutex b. QSemaphore c. QThread d. 以上都不是 45以下关于 Qt 线程叙述正确的是 a. Qt 中提供了 Thread 线程类 b. Qt 中提供了 QThread 线程类 c. 通过重载 Thread : : run ( ) 函数定义线程的执行内容 d. 通过重载 QThread : : _run ( ) 函数定义线程的执行内容 46有如下关于线程的代码 class Your_Class : public QThread { public : virtual void run ( ) ; }; void Your_Class : run ( ) Your——Class run { for ( int i=0 ; i < 100 ; i++ ) ; } int main ( ) { Your_Class a ; a . run ( ) ; return 0 ; } 其中有几处错误 a. 1 b. 2 c. 3 d. 4 47以下关于线程编程时的注意事项中不正确的是 a. 在持有 Qt 库互斥量时必须执行阻塞操作 b. 在调用除了 Qt 容器和工具类外的任何内容之前锁定 Qt 应用程序互斥 量 c. 只在 GUI 线程中使用 QNetwork 类 d. 不要在应用程序中把普通 Qt 库与支持线程的 Qt 库混用 48以下不属于拖放机制的是 a. 拖动 b. 剪贴板 c. 放下 d. 以上都不是

49以下关于拖动的叙述错误的是 a. 在拖动之后QDragObject 被立即删除 b. 拖放明显完成后这个 QDragObject 要被保存 c. QDragObject 可能要与其他进程通信 d. QDragObject 对象最后由 Qt 删除 50在一些简单情况下拖放的目标接收一个被拖动数据的拷贝并且由源决定 是否删除初始的拖动对象这是 QDropEvent 中的什么操作 a. Copy b. Move c. Link d. 以上都不是 51Qt/Embedded 的开发公司是 a. Microsoft b. Sun c. Oracle d. Trolltech 52以下各项中关于焦点定位的习惯方式叙述错误的是 a. 用户按 Tab 键 b. 用户按 Enter 键 c. b 选项不是 d. 用户使用鼠标滚轮 53以下关于 Qt/Embedded 叙述不正确的是 a. 是 C/S 结构 b. 类库完全采用 C 语言 c. 采用 framebuffer 作为底层图形接口 d. 将外部输入设备抽象为 keyboard 和 mouse 输入事件 54以下关于字体的叙述正确的是 a. Qt/Embedded 用 QFontManager 管理字体与字体相关的类在服务器端运 行 b. Qt/Embedded 用 QFontManager 管理字体与字体相关的类在客户端运行 c. Qt/Embedded 用 FontManager 管理字体 与字体相关的类在服务器端运行 d. Qt/Embedded 用 FontManager 管理字体与字体相关的类在客户端运行 55以下各项中与显示无关的类是 a. QScreen b. QLock c. QWSManager d. QDiskFont 56以下不是 Qt 支持的图像格式是 a. JPG b. PNG c. BMP d. XPM 57以下叙述正确的是 a. Qt 支持 GIF 格式图像且可以存储它们

b. Qt 支持 GIF 格式图像但不可以存储它们 c. Qt 不支持 GIF 格式图像但可以存储它们 d. Qt 不支持 GIF 格式图像且不可以存储它们 58用 QPainter 的转换函数对图像做转换后若要恢复图像的原样则以下正确 的是 a. 无法实现 b. 可以实现用 QPainter : : resetForm ( ) 只能恢复最近一次的转换 c. 可以实现用 QPainter : : resetForm ( ) 可以撤销所有的转换操作 59用 QPixmap 对象打开 GIF 动画以下叙述正确的是 a. 可以看到动画 b. 看不到任何画面 c. 只能看到动画的第一帧 d. 只能看到动画的最后一帧 60以下关于 Qt/Embedded 客户端与服务器的描述不正确的是 a. 客户端可以有多个 b. 服务器可以有多个 c. 客户端只有一个 d. 服务器只有一个
简答题

1、 什么是 qt有什么优点 答Qt 是诺基亚开发的一个跨平台的 C++图形用户界面应用程序框架。它提供 给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt 是完全面向 对象的很容易扩展并且允许真正地组件编程。是一个跨平台的 C++ 图形 用户界面库。 Qt 具有非常强的跨平台和移植性强的特点。同时支持 linux、 windows、嵌入式的用户界面开发。 2、 使用 Qt 编码实现 Lable 显示“hello world”的功能。 #include<QtGui/QApplication> #include<QtGui/QWidget> #include<QtGui/QLabel> //#include<QtCore/QTextCodec> int main(int argc,char *argv[]) {

QApplication app(argc,argv); //QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030")); QWidget *pWidget=new QWidget; QLabel label(pWidget); label.setText("hello world"); pWidget->show(); return app.exec(); } 3、 编写代码实现调用槽函数退出的 quit 程序界面如下

#include<QtGui/QWidget> #include<QPushButton> #include<QtGui> int main(int argc,char *argv[]) { QApplication app(argc,argv); QWidget *pWidget=new QWidget; QPushButton *button=new QPushButton("Quit",pWidget); QObject::connect(button,SIGNAL(clicked()),pWidget,SLOT(close())); pWidget->show();

return app.exec(); } 4、 编程实现 spinbox 和 slider(QSlider(Qt::Horizontal))之间的交互界面 如下两种期间的范围全部是 0-130。Title 为“enter your age”

#include<QApplication> #include<QHBoxLayout> #include<QSpinBox> #include<QSlider> #include<QtGui> int main(int argc,char* argv[]) { QApplication app(argc,argv);//创建 app 的构造函数 QWidget *pWidget= new QWidget; //new 一个 Widget //设置 caption

pWidget->setWindowTitle("enter your age"); QSpinBox* spinbox = new QSpinBox;

//new 一个 spinbox //new 一个 slider

QSlider* slider = new QSlider(Qt::Horizontal); 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(); } //窗体显示

5、 如何编译运行 qt 程序命令是什么 qmake -project qmake make 6、 如何将 UI 界面问件转化成代码的.h 文件 假设 ui 文件名为 gogogo.ui。 UIC -o gogogo.h gogogo.ui

7、 请填写空格处的语句实现声明自己的槽 MyWinExit 和信号 OnExit。

class MyWindow : public Qwidget { Q_OBJECT public: MyWindow(QWidget *parent = 0);

signals: OnExit(); private slots: MyWinExit();
}

8、 假设我们建立了一个 widget 的图形用户界面如图所示

那么我们 main 文件应该怎么写假设 ui 的名字为 gotocelldialog.ui
#include <QApplication> #include <QDialog> #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(); }

9、 假设文件浏览器的界面定义如下
/******************************************************************** ************

** Form generated from reading ui file 'dir.ui' ** ** Created: Fri Dec 10 11:46:18 2010 ** ** ** WARNING! All changes made in this file will be lost when recompiling ui file! ********************************************************************* ***********/ by: Qt User Interface Compiler version 4.5.0

#ifndef UI_DIR_H #define UI_DIR_H

#include <QtCore/QVariant> #include <QtGui/QAction> #include <QtGui/QApplication> #include <QtGui/QButtonGroup> #include <QtGui/QComboBox> #include <QtGui/QDialog> #include <QtGui/QHeaderView> #include <QtGui/QListView> #include <QtGui/QSplitter> #include <QtGui/QTableView> #include <QtGui/QTreeView> #include <QtGui/QVBoxLayout>

QT_BEGIN_NAMESPACE

class Ui_Dialog { public: QVBoxLayout *verticalLayout; QComboBox *comboBox; QSplitter *splitter_2;

QSplitter *splitter; QTreeView *treeView; QListView *listView; QTableView *tableView;

void setupUi(QDialog *Dialog) { if (Dialog->objectName().isEmpty()) Dialog->setObjectName(QString::fromUtf8("Dialog")); Dialog->resize(901, 372); verticalLayout = new QVBoxLayout(Dialog);

verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); comboBox = new QComboBox(Dialog); comboBox->setObjectName(QString::fromUtf8("comboBox")); comboBox->setMaximumSize(QSize(85, 16777215));

verticalLayout->addWidget(comboBox);

splitter_2 = new QSplitter(Dialog); splitter_2->setObjectName(QString::fromUtf8("splitter_2")); splitter_2->setOrientation(Qt::Horizontal); splitter = new QSplitter(splitter_2); splitter->setObjectName(QString::fromUtf8("splitter")); splitter->setOrientation(Qt::Horizontal); treeView = new QTreeView(splitter); treeView->setObjectName(QString::fromUtf8("treeView")); splitter->addWidget(treeView); listView = new QListView(splitter); listView->setObjectName(QString::fromUtf8("listView")); splitter->addWidget(listView); splitter_2->addWidget(splitter); tableView = new QTableView(splitter_2); tableView->setObjectName(QString::fromUtf8("tableView"));

splitter_2->addWidget(tableView);

verticalLayout->addWidget(splitter_2);

retranslateUi(Dialog);

QMetaObject::connectSlotsByName(Dialog); } // setupUi

void retranslateUi(QDialog *Dialog) { Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0, QApplication::UnicodeUTF8)); comboBox->clear(); comboBox->insertItems(0, QStringList() << QApplication::translate("Dialog", 0,

"\345\210\227\350\241\250\350\247\206\345\233\276", QApplication::UnicodeUTF8) <<

QApplication::translate("Dialog", 0,

"\347\264\247\345\207\221\350\247\206\345\233\276", QApplication::UnicodeUTF8) ); Q_UNUSED(Dialog); } // retranslateUi

};

namespace Ui { class dir: public Ui_Dialog {}; } // namespace Ui

QT_END_NAMESPACE

#endif // UI_DIR_H

请使用Qdir实现treeviewlistviewtableview项目
答 dir.h #ifndef DIR_H #define DIR_H

#include <QDialog> #include "ui_dir.h"

class Dir : public QDialog, public Ui::dir { Q_OBJECT public: Dir(QWidget *parent = 0); public slots: void chooseMode(int); }; #endif

dir.cpp #include <QtGui> #include "dir.h"

Dir::Dir(QWidget *parent) :QDialog(parent) { setupUi(this); QDirModel *dirModel;

QStringList filter; dirModel=new QDirModel(filter,QDir::Dirs| QDir::NoDotAndDotDot,QDir::DirsFirst|QDir::Name|QDir::Type);

treeView->setModel(dirModel); treeView->hideColumn(1); treeView->hideColumn(2); treeView->hideColumn(3); tableView->setModel(dirModel); listView->setModel(dirModel);

//tableView->hide();

comboBox=new QComboBox(); comboBox->addItem(tr("以图标方式显示")); comboBox->addItem(tr("以列表方式显示")); comboBox->addItem(tr("以详细信息方式显示"));

comboBox->setCurrentIndex(0); //selectionModel=ui->treeView->selectionModel();

connect(treeView,SIGNAL(doubleClicked(QModelIndex)),listView,SLOT(setRootIndex (QModelIndex))); connect(treeView,SIGNAL(doubleClicked(QModelIndex)),tableView,SLOT(setRootInde x(QModelIndex))); connect(comboBox,SIGNAL(activated(int)),this,SLOT(chooseMode(int))); } void Dir::chooseMode(int i) { /*if(i==0) { tableView->hide(); listView->show(); } if(i==1) { listView->hide(); tableView->show();

}*/ }

main.cpp #include <QApplication> #include "dir.h"

int main(int argc,char *argv[]) { QApplication app(argc,argv);

Dir *adddir = new Dir; adddir->show();

return app.exec(); }

10、编写一个简单的程序,它包含两个列表框,使用 for 循环向左边的列表框添加 几个条目。点击>按钮可以将左边选中的条目添加到右边.点击<按钮可以将右边 选中的条目添加到左边。点击>>按钮可以将左边的所有条目添加到右边。 提示列表框控件的类是 QListWidget。应该熟悉 QListWidget 常用的一些方 法及信号和槽。 运行结果如图

答 ui_listbox.h
/********************************************************************************

** Form generated from reading ui file 'listbox.ui' ** ** Created: Mon Jul 7 00:10:58 2008 ** ** ** WARNING! All changes made in this file will be lost when recompiling ui file! ********************************************************************************/ by: Qt User Interface Compiler version 4.4.0

#ifndef UI_LISTBOX_H #define UI_LISTBOX_H

#include <QtCore/QVariant> #include <QtGui/QAction> #include <QtGui/QApplication> #include <QtGui/QButtonGroup> #include <QtGui/QListWidget> #include <QtGui/QPushButton> #include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Form { public: QListWidget *leftList; QListWidget *rightList; QPushButton *add; QPushButton *remove; QPushButton *addAll; QPushButton *removeAll;

void setupUi(QWidget *Form) { if (Form->objectName().isEmpty())

Form->setObjectName(QString::fromUtf8("Form")); Form->resize(522, 388); leftList = new QListWidget(Form); leftList->setObjectName(QString::fromUtf8("leftList")); leftList->setGeometry(QRect(10, 20, 211, 341)); rightList = new QListWidget(Form); rightList->setObjectName(QString::fromUtf8("rightList")); rightList->setGeometry(QRect(295, 20, 211, 341)); add = new QPushButton(Form); add->setObjectName(QString::fromUtf8("add")); add->setGeometry(QRect(230, 80, 51, 27)); remove = new QPushButton(Form); remove->setObjectName(QString::fromUtf8("remove")); remove->setGeometry(QRect(230, 130, 51, 27)); addAll = new QPushButton(Form); addAll->setObjectName(QString::fromUtf8("addAll")); addAll->setGeometry(QRect(230, 180, 51, 27)); removeAll = new QPushButton(Form); removeAll->setObjectName(QString::fromUtf8("removeAll")); removeAll->setGeometry(QRect(230, 230, 51, 27));

retranslateUi(Form);

QMetaObject::connectSlotsByName(Form); } // setupUi

void retranslateUi(QWidget *Form) { Form->setWindowTitle(QApplication::translate("Form", QApplication::UnicodeUTF8)); add->setText(QApplication::translate("Form", QApplication::UnicodeUTF8)); remove->setText(QApplication::translate("Form", QApplication::UnicodeUTF8)); "<", 0, ">", 0, "Form", 0,

addAll->setText(QApplication::translate("Form", QApplication::UnicodeUTF8)); removeAll->setText(QApplication::translate("Form", QApplication::UnicodeUTF8)); Q_UNUSED(Form); } // retranslateUi

">>",

0,

"<<",

0,

};

namespace Ui { class Form: public Ui_Form {}; } // namespace Ui

QT_END_NAMESPACE

#endif // UI_LISTBOX_H

listbox.h
#ifndef _LISTBOX_H_ #define _LISTBOX_H_

#include "listbox_ui.h"

class CListBox:public QWidget,public Ui_Form { Q_OBJECT public: CListBox(QWidget* parent=0);

private slots: void add(); void addAll(); void remove();

void removeAll();

};

#endif

listbox.cpp
#include <QtGui/QtGui> #include "listbox.h"

CListBox::CListBox(QWidget* parent):QWidget(parent) { setupUi(this); for(int i=1;i<=6;i++) leftList->addItem(tr("条目%1").arg(i));

connect(addBtn,SIGNAL(clicked()),this,SLOT(add())); connect(addAllBtn,SIGNAL(clicked()),this,SLOT(addAll())); connect(removeBtn,SIGNAL(clicked()),this,SLOT(remove())); connect(removeAllBtn,SIGNAL(clicked()),this,SLOT(removeAll()));

}

void CListBox::add() { QListWidgetItem* item=leftList->currentItem(); if(item==0) return; rightList->addItem(item->text()); leftList->takeItem(leftList->currentRow()); }

void CListBox::addAll() {

for(int i=0;i<leftList->count();i++) { QListWidgetItem* item=leftList->item(i); rightList->addItem(item->text()); } leftList->clear();

}

void CListBox::remove() { QListWidgetItem* item=rightList->currentItem(); if(item==0) return; leftList->addItem(item->text()); rightList->takeItem(rightList->currentRow()); }

void CListBox::removeAll() { for(int i=0;i<rightList->count();i++) { QListWidgetItem* item=rightList->item(i); leftList->addItem(item->text()); } rightList->clear(); }

int main(int argc,char* argv[]) { QApplication app(argc,argv); QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); CListBox dlg;

dlg.show(); return app.exec(); } 11.QApplication 的主要作用是什么 QApplication 对象管理 QtGui 应用程序的控制流程和主要的设置参数 12.请写一个调用消息对话框提示报错的程序 QMessageBox::waring(this,tr(“警告”)tr(“用户名或密码错误”)QMessageBox Yes) 13.QT 都提供哪些标准对话框以供使用他们实现什么功能 9 个 QColorDialog 颜色对话框能够允许用户选择颜色、QErrorMessage 显示错误信息、 QFileDialog 文件对话框能够允许用户选的一个或者多个文件以及目录、QFontDialog 字 体对话框允许用户选择/设置字体、QInputDialog 输入对话框允许用户进行简单的输入、 QPageSetupDialog 叶设置对话框配置与页相关的打印机选项、QProgressDialog 进度对 话框 指示一个长时间操作的工作进度以提示用户该操作是否已经停止、QPrintDialog 打 印对话框配置打印机可以允许用户选择可用的打印机、QMessageBox。 14.QT 中怎么在一个窗口中获得另一个窗口的指针 Class A { B b P; } b.p Class B { Public: getName(char *p) { d=p; } } b.getName(this->p); 什么是 Qt有什么优点 Qt 是有 Troltech 公司开发的一个多平台的 c++图形用户界面程序框架。 优点它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。Qt 是完全面 向对象的很容易扩展并且允许真正地组件编程。 可移植性 QT 不仅适用于 UNIX同样适用于 Windows。为了同时拥有世界上几百万 UNIX 用户以及几百万的 Windows 用户最好的办法是采用一个既适用于 UNIX 又适用于 Windows 的 GUI 工具包其答案是 QT。 易用性QT 是一个 C++工具包它由几百个 C++类构成你在程序中可以使用这些类。因 为 C++是面向对象的编程语言而 QT 是基于 C++构造所以 QT 具有 OOP 的所有优点

运行速度QT 非常容易使用且也具有很快的速度。QT 的易用性和快速是密不可分的。 这一优点要归功于 QT 开发者的辛苦工作他们花费了大量的时间来优化他们的产品。QT 比其他许多 GUI 工具包运行速度快的原因是其实现方式。QT 是一个 GUI 仿真工具包即 它不使用本地工具包作调用而是使用各自平台上的低级绘图函数从而提高程序速度