- 博客(167)
- 资源 (9)
- 收藏
- 关注
原创 QTimer
在mainwindow.h中添加代码。在mainwindow.cpp中添加代码。添加头文件#include 在构造函数里添加以下代码。 startTimer(1000); //其返回值为1,即其timerId为1startTimer(5000);//其返回值为2,即其timerId为2startTimer(10000); //其返回值为3,即其timerId为3
2009-11-11 08:31:00
350
原创 固定窗口大小
layout()->setSizeConstraint(QLayout::SetFixedSize); 另一种:构造函数的实现从这里开始。同大多数窗口部件一样,它把parent传递给了QWidget构造函数。 : QWidget(parent) { setFixedSize(200, 120); 我们固定它的值。
2009-11-10 13:55:00
468
原创 实现状态栏显示
QStatusBar* bar = ui->statusBar; //获取状态栏//还有种写法://statusBar()->addWidget(locationLabel);//statusBar()->addWidget(formulaLabel, 1);first_statusLabel = new QLabel; //新建标签first_statusLabel->se
2009-11-10 13:40:00
343
原创 鼠标移动事件&键盘按下事件
/*以下是鼠标移动事件*/void MainWindow::mouseMoveEvent(QMouseEvent *m){//这里的函数名和参数不能更改QCursor my(QPixmap("E:/Qt/Qt-Creator-Example/event/time.png"));//为鼠标指针选择图片,注意这里要用绝对路径,且要用“/”,而不能用“/”QApplicatio
2009-11-10 12:44:00
671
原创 打开和保存文件对话
QString fileName = QFileDialog::getOpenFileName(this);if (!fileName.isEmpty()){ loadFile(fileName);} Quote: QString fileName = QFileDialog::getSaveFileName(this); if (fileName.isEmpty()
2009-11-10 12:39:00
269
原创 QCloseEvent
如果在窗体关闭前自行判断是否可关闭,重新实现这个窗体的closeEvent()函数void MainWindow::closeEvent(QCloseEvent *event){ if (maybeSave()) {event->accept(); } else {event->ignore(); }}注意:如果加入QMessageBox提示框后,有时没有这么简单
2009-11-10 12:33:00
1688
原创 静态编译
1 编译QT。要静态编译,首先要求QT是静态编译过的。在QT目录下执行:configure.exe -static -releasemake sub-src就可以编译出静态库。如果只是用来分发程序,也可以mingw32-make release sub-src只编译一个静态库。这个过程需要1-2个小时。QT目录会变成1.8G左右。注:mingw32-make和make是一样的。如
2009-10-29 13:57:00
362
原创 QT API
void QWidget::closeEvent ( QCloseEvent * e ) [虚 保护] 这个对于事件e的事件处理器可以在子类中被重新实现来接收窗口部件关闭事件。 默认实现是调用e->accept(),它隐藏这个窗口部件================QAction类提供了一个可以同时出现在菜单和工具条上的抽象用户界面操作一个操作可以被添加到菜单和工具条中并且将会
2009-10-22 11:55:00
452
原创 信号和槽
你可以为一个槽连接多个信号, 同样一个信号也可以被连接到多个槽.甚至于你可以把一个 信号直接连接到其他信号. (在第一个信号发送后将马上发送第二个信号.) 总之, 信号和槽形成了一个强大的组件编程机制. 一个很小的基于对象声明如下: #include class Counter : public QObject {
2009-10-20 09:56:00
1369
原创 宏定义
#ifndef ... //检查***是否已经被定义,如果没定义,进入 #def... //定义*** code #endif //结束 一个叫head.h的头文件,被你工
2009-10-19 17:44:00
329
原创 QObject
QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit())); QObject是所有类的根。Qt使用这个QObject实现了一个单根继承的C++。它里面有一个connect静态函数,用于连接信号槽。================一个按钮被点击时,它会发出一个clicked信号,意思是,向周围的组件们声明:我被点击啦!
2009-10-19 16:27:00
2286
原创 Makefile
生成Makefile当你已经创建好你的项目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:Makefile可以像这样由“.pro”文件生成: qmake -o Makefile hello.pro================qmake -project hello.pro //创建工程qmake -o Makefile hello
2009-10-19 09:56:00
863
原创 纯虚函数
抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。 纯虚函数是一种特殊的虚函数,它的一般格式如下: class { virtual ()=0;
2009-10-18 18:04:00
258
原创 虚基类
多继承体系中: class B{}; class A : public B{}; class C : public B{}; class D : public A, public C{}; A里有个B,C里也有个B,则D里会有两个
2009-10-18 15:10:00
276
原创 类的大小
class CBase{};运行coutsizeof(CBase)=1; 一个类的大小可以被下面的方式改变: class A { bool a; int b; bool c; }; //sizeof (A) == 12 在我的电脑上sizeof (A)
2009-10-18 14:59:00
220
原创 虚函数
一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始) 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism) class A{ public: virtual void print(){ cout }; class B:public A{
2009-10-18 14:39:00
227
原创 派生方式
1、如果类里面有成员类,成员类的构造函数优先被调用;2、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);3、 基类构造函数如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序;4、成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序;
2009-10-18 14:10:00
441
原创 友元
C++要求 赋值 = 下标 [] 调用 () 和成员访问箭头 -> 操作符必须 被定义为类成员操作符 任何把这些操作符定义为名字空间成员的定义都会被标记 为编译时刻错误 例如 // 错误: 必须是类成员 char& operator[]( String & ,int ix ); // 错误: 不能为 int 重新定义内置的操作符 int operator
2009-10-18 11:46:00
234
原创 无名对象
#include iostream> using namespace std; class Internet { public: Internet(char *name,char *address) { cout strcpy(Internet::name,name); } Internet(Internet &temp
2009-10-18 11:44:00
215
原创 运算符重载-=
#include using namespace std; class Internet { public: Internet(char *name,char *url) { Internet::name = new char[strlen(name)+1]; Internet::url = new char[strlen(url)+1]; if(name) { strcpy(Interne
2009-10-18 09:13:00
220
原创 运算符重载
#include iostream> using namespace std; class Test { public: Test(int a = 0) { coutthis Test::a = a; } Test(Test &te
2009-10-18 09:00:00
183
原创 成员初始化表
让我们修改Account 类重新声明它的_name 成员为string 型#include class Account {public:// ...private:unsigned int _acct_nmbr;double _balance;string _name;};我们还需要修改构造函数这涉及到两个主题1 维持与原始接口的兼容性同时适合新的类型2 用一组相关的构造函数来初始化一个成员类对
2009-10-17 13:26:00
208
原创 类对象数组
类对象数组与内置类型数组的定义方式相同例如Account table[ 16 ];定义了一个含有16 个Account 对象的数组且每个元素依次用Account 缺省构造函数初始化如果我们愿意的话则可以用放在括号中的初始化表给构造函数提供显式实参例如Account pooh_pals[] = { "Piglet", "Eeyore", "Tigger" };定义了三个元素的数组三个元素依次用构造
2009-10-17 13:03:00
338
原创 析构函数
让我们看一个例子,当写:char *arena = new char [ sizeof Image];时,实际上我们已经分配了一个大小等于Image 型对象的新的堆存储区。相关联的内存区没有被初始化,里面是上次使用之后的一段随机位序列。当我们写:Image *ptr = new (arena) Image( “Quasimodo” )时,没有新的内存被分配。相反,ptr 被赋值为与arena 相
2009-10-17 12:26:00
258
原创 auto_ptr
1 构造函数与析构函数auto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象。我们可以这样使用auto_ptr来提高代码安全性:int* p = new int(0);auto_ptr ap(p);从此我们不必关心应该何时释放p, 也不用担心发生异常会有内存泄漏。这里我们有几点要注意:1) 因为auto_ptr析构的时候肯定会删除他所拥有的那个对
2009-10-17 11:48:00
184
原创 new malloc
new 是c++中的操作符,malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。4、new 和 malloc效率比较
2009-10-17 10:48:00
269
原创 C++ 几种对象数组初始化(带参数的构造函数)
class R{public: R ( int r1, int r2) : R1(r1),R2(r2){}private: int R1, R2;};void main(){e.g 1 vector r; for(int i=0; i r.push_back( new R(i,i+1));e.g 2 R *r[5]; for ( int i=0; i
2009-10-17 10:44:00
2831
原创 拷贝构造函数
1. 对于一个类X,如果一个构造函数的第一个参数是下列之一:a) X&b) const X&c) volatile X&d) const volatile X&且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数. X::X(const X&); //是拷贝构造函数 X::X(X&, int=1); //是拷贝构造函数 2.类中可以存在超过一个拷贝构造函
2009-10-16 16:40:00
325
原创 类的初始化
Data 类需要提供一个构造函数吗正如它的定义所示它不需要因为它的所有数据成员都是公有的从C 语言继承来的机制支持显式初始化表类似于用在初始化数组上的初始化表例如int main(){// local1.ival = 0; local1.ptr = 0Data local1 = { 0, 0 };// local2.ival = 1024;// local2.ptr = "Anna Livia
2009-10-16 16:01:00
226
原创 局部类
在局部类中嵌套的类可以在其类定义之外被定义但是该定义必须出现在包含外围局部类定义的局部域内在局部域定义中的嵌套类的名字必须由其外围类名限定修饰在外围类中该嵌套类的声明不能被省略例如void foo( int val ){class Bar {public:int barVal;class nested; // 嵌套类的声明是必需的};// 嵌套类定义class Bar::nested {// .
2009-10-16 15:01:00
182
原创 作为名字空间成员的类
该类名不会与在其他名字空间中声明的名字冲突例如namespace cplusplus_pri mer {class Node { /* ... */ };} namespace DisneyFeatureAnimation {class Node { /* ... */ };}Node *pnode; // 错误: Node 在全局域中不可见// OK: 声明 nodeObj 的类型为
2009-10-16 14:46:00
172
原创 inline&const
结构体实例(包括共用体)和类实例的初始化方法完全相同,二者都可以应用于继承层次中。不同点是结构体(包括共用体)默认成员为public,而类默认成员是private型的。 struct S { int x; unsigned short y;};S testS1={100,123};S testS2={200};//未指定值的数据成员初
2009-10-16 14:28:00
334
原创 嵌套类
一个类可以在另一个类中定义这样的类被称为嵌套类nested class 嵌套类是其外围类的一个成员嵌套类的定义可以出现在其外围类的公有私有或保护区中 嵌套类的名字在其外围类域中是可见的但是在其他类域或名字空间中是不可见的这意味着嵌套类的名字不会与外围域中声明的相同名字冲突例如class Node { /* ... */ };class Tree {public:// Node 被封
2009-10-16 13:46:00
357
原创 类域
class String {public:// 错误: 名字 index_type 还没有被声明char& operator[]( index_type );typedef int index_type;}; 在类定义中用到的名字必须在使用前首先被声明这个规则有两种例外的情况第一个例外是对于被用在inline 成员函数定义中的名字第二个例外是于被用作缺省实参的名字我们来依次了解每一种
2009-10-16 12:01:00
328
原创 位域
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制
2009-10-16 10:59:00
197
原创 构造函数&私有
Class Singleton{public:static Singleton * GetInstance(){ if(!m_pInstance) m_pInstance = new Singleton(); return pinstance;}private: static Singleton *m_pInstance; Singleton();
2009-10-16 10:30:00
225
原创 联合
union TokenValue {char _cval;int _ival;char *_sval;double _dval;};如果在TokenValue 的成员中最大的数据类型是_dval 则TokenValue 的大小是double型对象的大小缺省情况下union 的成员都是公有成员union 的名字可以被用在任何类名可以被使用的地方例如// TokenValue 类型的对象Token
2009-10-16 10:08:00
189
原创 匿名名字空间
名字空间(namespace),是C++提供的一个解决符合名字冲突的特性。标准规定,在不同名字空间中命名相同的符号,代表不同的实体。通常,利用定义名字空间的办法,可以使模块划分更加方便,减少模块间的相互影响。通常定义一个名为MyNameSpace的名字空间,其形式为: 1 namespace MyNameSpace 2 { 3 } static修饰,在处理函
2009-10-16 10:08:00
1819
1
原创 类成员的指针
1.首先普通函数指针不能被赋值为成员函数的地址,即使返回类型和参数完全匹配。例如:下面是的pfi是一个普通函数指针,它没有参数,返回类型为int:int (*pfi)();若有两个全局函数,HeightIs()和WidthIs():int HeightIs();int WidthIs();则下面的的赋值操作是合法的:pfi = HeightIs();pfi = WidthIs();但如今
2009-10-16 09:42:00
385
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人