一.Qt的那些事儿
1. QObject是所有类的基类,而QWidget是所有图形类的基类,继承了QObject和QPaintDevice。
2. Qt Object Model,主要包括如下的东西
1.信号和槽,connect函数
2.良好的对象属性,如可查询和很好看,,,~~
3.有力的事件和事件过滤器
4.国际化字符设计
5.定时器为GUI的事件提供毫秒级的支持
6.很优秀的对象树结构
7.当对象销毁时指针自动设置为0
8.a dynamic cast that works across library boundaries,不知如何翻译
3. Win32 application 与win32 ConsoleApplication的区别
Win32 Application的入口函数为WinMain,include<windows.h>,能够使用win32API函数。
Win32 Console Application的入口函数是main,不能使用win32API函数。
4. 函数重载与子类成员函数覆盖
函数重载是发生在同一个类里,特别注意:函数名和参数都相同,而返回类型不一样的,不能重载;
子类在继承父类时,对同一个函数进行重定义,称为函数覆盖,不是重载;
除了虚函数,普通函数不占堆栈去大小,对sizeof无效,而是放在代码区;
5. 错误之:把槽函数当普通函数声明了
例如:我想通过一个按钮来选取文件名,并用消息框显示出来,
建立了如下的信号槽
connect(ui.BtnGetFile, SIGNAL(clicked()), this, SLOT(GetFileName()));
槽函数定义如下:
void StripeStatis::GetFileName()
{
QString filename = QFileDialog::getOpenFileName(this,"test", "D:");
if (!filename.isEmpty())
{
QMessageBox::information(this, "filename",filename);
}
}
但是,在申明这个函数去当作普通函数来申明了
准确的是应该在头文件中注明是槽函数,方法如下:
public slots:
void GetFileName();
6. 句柄可直接调用函数
ui.EdtFile->setText(filename);
目的: 讲Dialog窗口中LineEdit中的值改变成“filename”;
说明: Ui是Dialog类对象,而LineEdit是ui的一个成员变量,这个变量的类型是QLineEdit,而QLineEdit就具有void setText(const QString&)函数可以改变QLineEdit对象的值。
Ui的定义:Ui::StripeStatis ui;
7. 窗口之间参数传递
如要讲一个QLineEdit中的值传递个另一个QLineEdit,就可以在这个窗口类中定义个成员变量,来完成窗口内部个组件之间的参数传递;
下面的界面中,点击“统计开始”,获取到QLineEdit中的值,并用一个MessgeBox输出!
在窗口类的头文件中,创建一个成员变量“filename”
private:
QString filename;
connect(ui.BtnDo, SIGNAL(clicked()),this, SLOT(Do()));
void StripeStatis::Do()
{
QMessageBox::information(this, "filename",filename);
}
connect(ui.BtnGetFile, SIGNAL(clicked()),this, SLOT(GetFileName()));
void StripeStatis::GetFileName()
{
filename = QFileDialog::getOpenFileName(this,"test", "D:");
if (!filename.isEmpty())
{
ui.EdtFile->setText(filename);
}
}
8. QT中文识别设置
在QT中往往要用到中文,如果直接写中文,会产生乱码现象,但是,可以通过如下设置解决这个问题:
首先,在包含main函数的文件中包含#include <QTextCodec>头文件;
然后在main函数中输入如下代码;
QTextCodec * codec= QTextCodec::codecForName("GB2312");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
如此便OK!
9. QT图像显示
首先,在QTDesigner中创建一个Label 组件,
假设其句柄名称为”Label”,显示图像时,会用到。
然后,在你的某个响应函数中,输入如下代码:
QString filename;
filename= QFileDialog::getOpenFileName(this,tr("选择图像文件"),"D:", tr("Images(*.tif *.bnp *.jpg *.GIF)"));
if (filename.