您的位置:首页 > 编程语言 > Qt开发

QT系列笔记总结

2012-01-07 15:40 363 查看
知识点1:
Qt Creator 编译的程序,在其工程文件夹下会有一个debug文件夹,其中有程序的.exe 可执行文件。但Qt Creator 默认是用动态链接的,就是可执行程序在运行时需要相应的.dll 文件。我们点击生成的.exe 文件,首先可能显示“没有找到mingwm10.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”表示缺少mingwm10.dll 文件。解决这个问题我们可以将相应的.dll 文件放到系统中。在Qt Creator
的安装目录的qt 文件下的bin 文件夹下(我安装在了D 盘,所以路径是D:\Qt\2009.04\qt\bin),可以找到所有的相关.dll 文件。在这里找到mingwm10.dll 文件,将其复制到C:\WINDOWS\system 文件夹下,即可。下面再提示缺少什么dll 文件,都像这样解决就可以了。

知识点2:MainWindow Framwork



知识点3:

单击.h中声明的函数,再右击可以选择重命名;双击.h中声明的函数,再右击可以选择在.cpp中声明此函数;

知识点4:QMessageBox的几种表达方法:

QMessageBox 可以弹出常见的4中对话框:禁止,消息,询问,警告



方法1:

Int ret=QMessageBox::warning(this,"ques","are you ok?"
,QMessageBox::Cancel | QMessageBox::Ok
,QMessageBox::Cancel);

switch(ret)
{
case QMessageBox::Ok:
function1();
break;
case QMessageBox::Cancel:
function2();
break;
default:;
}

方法2:

msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
msgBox.setText("Are you sure to start a new game?");
int ret=msgBox.exec();
switch(ret)
{
case QMessageBox::Ok:
function1();
break;
case QMessageBox::Cancel:
function2();
break;
default:;
}

方法3:

QMessageBox box;
box.setWindowTitle(tr("警告"));
box.setIcon(QMessageBox::Warning);
box.setText(curFile + tr(" 尚未保存,是否保存?"));
box.setStandardButtons(QMessageBox::Yes |QMessageBox::No);
if(box.exec() == QMessageBox::Yes)

{ function3(); }

实例1:多窗口

(Base class: Widget)  :nGUI.pro

整个程序里,我们用两种方法实现了信号和槽函数的关联,
第一个按钮: 直接在设计器中实现其关联;
第二个按钮: 写了槽函数语句;
其实图形的设计与直接写代码效果是一样的。
这个程序里实现了两类窗口打开的方式,
一个: 自身消失而后打开另一个窗口;
1. 加上头文件#include” mydlg.h”

/*新建窗口的对象my1*/
myDlg my1;
if(my1.exec()==QDialog::Accepted)

//利用Accepted信号判断enterBtn 是否被按下
{
w.show(); //如果被按下,显示主窗口
return a.exec(); //程序一直执行,直到主窗口关闭
}

*****************************************************

错误代码1对比:

if(my1.exec()==QDialog::Accepted)
{
Widget w;
w.show();
}
return a.exec();

运行效果:

按下 进入键 后,主界面窗口一闪就没了。

代码分析:

w 是在if 语句里定义的,所以当if 语句执行完后它就无效了,

再次点击运行时,就会出现error:collect2: ld returned 1 exit

status 的错误。这是因为虽然主窗口没有显示,但它只是隐藏了,程序并没有

结束,而是在后台运行。

错误代码2对比:

Widget w;
if(my1.exec()==QDialog::Accepted)
{
w.show();
}
return a.exec();

运行效果:

在my1 对话框出现的时候不点enterBtn,而是直接关闭对话框,此时整个程序并没有结束执行,
return a.exec();一句表示只要主窗口界面不退出,那么程序就会一直执行。
一个: 是打开另一个窗口而自身不消失。
可以看到他们实现的方法是不同的。

实例2:添加菜单图标:

1.在Qt Creator 中添加资源文件,并且为菜单添加了图标;

2.在工具栏中添加图标,删除图标(remove action);

3.布局管理器与分裂器的区别;

布局管理器:它能使器件的大小随着窗口大小的改变而改变。
例如:(Text edit)
选中主窗口部件,然后在空白处点击鼠标右键,选择Layout->LayOut
in a Grid,??使整个主窗口的中心区处于网格布局管理器中。
或者选择工具栏中的栅格布局,有同样的效果;
运行一下程序,可以看到无论怎样拉伸窗口,文本编辑框的大小都会随之改变。
我们在这里一共讲述了三种使用布局管理器的方法,一种是去器件栏添加,一

种是用工具栏的快捷图标,还有一种是使用鼠标右键的选项。

实例3:实现文本编辑:

相关类学习:QFile

S1:在实例2的基础上,在信号与槽函数中添加简单的cut,copy,paste,

Undo,exit,clear功能;

其中,textEdit是从Input Widget中拖出的文本编辑框;

而textedit是 自定义类名(默认情况下是MainWindow)

先在main.cpp 文件中加入以下语句,让程序中可以使用中文。

在其中加入#include <QTextCodec> 头文件包含,

再在主函数中加入下面一行:QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

S2:

curFile = tr("未命名.txt");//初始化文件名为“未命名.txt”

setWindowTitle(curFile); //初始化主窗口的标题

S3: 主体设计

Bool isSave; //the label of text_save ,false->notsave,true->saved

curFile //thename of current file

Mainwindow :改变标题; setWindowTitle(curFile);

QFile:

QTextStream: 流操作类

QFileDialog 相关文件对话框类

QFileInfo -> QString;

1. new: 新建:

QMessageBox: 是否保存;改变isSave ,(saveOrNot)

->; Mainwindow :改变当前文件名称 标题(title);

-> textedit->clear();清空文件内容;

2. open-----------read()

QMessageBox: 是否保存;改变isSave ,(saveOrNot)

-> getopenFileName / getSaveFileName

->clear();

->loadFile();(QFileInfo:文件读取类)/saveFile
QFile .,QTextStrin
g .open

**************************************************************************

QFileDialog类:

QString filename=QFileDialog:: getOpenFileName(…);


QFile file

file.open

QTextStream in(&file);

ui->textEdit->setText(in.readAll());

QFileInfo:文件读取类 :

QFileInfo filename;

QString curFile=


fileName.canonicalFilePath();

**************************************************************************

3. save------------------write()

**************************************************************************

QFile类,

QFilefile;

File.open();->false…

->success:

QTextStream流操作类

QTextStream out;

Out<<ui->textEdit->toPlainText();
本形式输入流对象中;

QFileInfo:文件读取类 :

QFileInfo filename;

QString curFile=


fileName.canonicalFilePath();

**************************************************************************

4. saveAs

-> QMessageBox:是否保存;改变isSave,(saveOrNot);

->saveFile();

**************************************************************************

QFileDialog类:

QString filename=QFileDialog:: getOpenFileName(…);

=getSaveFileName(…);/*调出保存对话框*/

Filename.isempty();

Function:

Returns true if the string has no characters; otherwisereturns false.

**************************************************************************

实例5.实现文本查找:

QLineEdit类:

QDialog类:

QPushButton类:

QVBoxLayout类:

代码实现一个简单的查找对话框

实例6:实现状态栏的显示:

QLabel类

QStatusBar类

QFrame类

实例4:界面登入系统

1. 在登入按钮槽函数中,添加发送accept()信号函数;
若是添加的类是Dialog Withbutton,(系统自带accept(),reject()函数);
若是Dialog Without button(手动添加accept(),reject()函数);

voidloginDlg::on_loginBtn_clicked()
{
accept();
}

添加信号发送有两种方法:

一是右击转到槽;

二是直接在下方的信号与槽编辑器中选择;

2. 在main.cpp中加入函数:(上节已提到)

login mydlg;

if(mydlg.exec()==QDialog::Accepted)

{

w.show();

return a.exec();

}

3. 在login.cpp原基础上添加姓名与密码的认证:

if(ui->userLineEdit->text().trimmed()==tr("zxt")

&& ui->pwdLineEdit->text()==tr("123456"))

//判断用户名和密码是否正确

accept();

*********************************************************

各种字符类型间的转换:

ui->usrLineEdit->text()==tr("qt")

tr:将普通字符串转变成QString类型;赋值给lineEdit

int width=ui->lineEdit->text().toInt();

.toint:将从lineEdit中得到的QString类型转换为int型;

QString txt;

ui->lineEdit->setText(txt.setNum((width)));

setNum():将整形转换成QString类型;赋值给lineEdit

(ui->userLineEdit->text().trimmed()

QDateTime date=QDateTime::currentDateTime();
QString str=date.toString("yyyy-MM-dd hh:mm:ss dddd");

作用就是移除字符串开头和结尾的空白字符。

**********************************************************

else{

QMessageBox::warning(this,

tr("Warning"),

tr("user name orpassworderror!"),

QMessageBox::Yes);

//如果不正确,弹出警告对话框

}

ui->username->clear();
ui->code->clear();
ui->username->setFocus();将光标转到用户名输入框
}

4.
在login.cpp 的loginDlg类构造函数里,添上初始化语句,使密码显示
为小黑点。
loginDlg::loginDlg(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::loginDlg)
{
m_ui->setupUi(this);
m_ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
}

实例7:定时器

QTimer类:
BoolisActive()const;/*正在运行*/
Void stop();
信号:
Void timeout();
实例8:扫雷
setPixmap(QPixmap(":/photo/unknown.jpg"));,Item 的贴图;
ui->newgame->setIcon(QIcon(":/photo/face-smile.jpg"));菜单对newgame按钮贴图
实例9:绘图
QPainter类 图形绘制
QWidgetPaintEvent();绘图事件
Qt Color()颜色
QPen类 画笔
QBrush类 画刷
QLinearGradient类;确定一条直线
QRectF类 矩形;
setBackgroundBrush(Qt::black)->设置背景颜色;
setForegroundBrush(Qt::red);->设置前景颜色

实现定时器与路程的更改;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: