QT编程中的一些简单的小总结

2010.02.21
今天在shell下用qmake来编译程序,老是出现以下一大窜错误
hello.c:9: error: expected ‘{’ at end of input
但是用qtcreate写的程序编译却没有问题,我当时以为是pro文件中的问题,但这个文件是qmake自动生成的,改了之后也没有作用,在网上搜了以下也没有找到原因,最后发现,原来我建立的源文件是.c文件,而qtcreate建立的是.cpp文件,我将我的.c文件改为.cpp后就能正确的编译了。
2010.2.23
Q_OBJECT宏的作用:启动Qt元对象系统的一些特性(比如支持信号和槽等),它必须被放在类定义的私有区。
头文件中类似class QLineEdit;之类的传递声明,作用是告诉编译器,QLineEdit类已经存在。好处有:减少头文件的大小,增加编译速度(特别是当该头文件被其他文件多次包含引用时);这样做可避免因包含头文件的顺序不当而造成连接错误。
QLineEdit行编辑框标签对象显示方式如下:通过SetEchoMode()设置显示方式,
QLineEdit::Normal默认的显示方式,显示用户实际输入的内容。
QLineEdit::Password用星号“*”代替用户实际输入的内容;
QLineEdit::NoEcho不显示用户输入的字符,尽管QLineEdit::PassWord可以有效地起到密码保护的作用,但它仍显示了用户输入字符的个数,而QLineEdit::NoEcho对显示的内容采取了更进一步的保密措施。
QLineEdit::PasswordEchoOnEdit;仅仅用户在行编辑框里编辑文本的内容时,才显示用户输入的字符,而在用户完成编辑后以星号代替输入的内容。
QGridLayout:网格布局管理器
QHBoxLayout:水平布局管理器
QVBoxLayout:垂直布局管理器
QLineEdit::text()返回行编辑框中文本内容,返回QString的字符窜。
QString::trimmed()移出了字符窜中开头和结尾的空白字符,并返回移出空白字符后的字符窜。这些空白字符包括ASCII字符"/t","/n","/v","/f","/r"和空格" ".
QMessage用法:
QMessageBox::warning()将创建并显示一个模态的警告对话框。
QMessageBox::about,一个带有标题和简单文本的消息框。
QMessageBox::aboutQt,显示qt的消息框,qt版本等信息。
QMessageBox::information,一个具有主题和提示文本的提示消息框
QMessageBox::question:一个具有标题和文本信息的询问消息框。
QMessageBox::critical:一个具有遍体和文本信息的致命错误消息框。
qt对话框的高级应用程序
#include<QtGui/QtGui>
#include<QtGui/QApplication>
#include<QMessageBox>
int main(int argc,char * argv[])
{
 QApplication app(argc,argv);
 QWidget * pWidget=new QWidget;
 QMessageBox box;
 box.setWindowTitle(QObject::tr("Warning"));
 box.setIcon(QMessageBox::Warning);
 box.setText(QObject::tr("Error,yes or no"));
 box.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
 box.setDetailedText(QObject::tr("error infomation"));
 switch(box.exec())
 {
  case QMessageBox::Yes:
QMessageBox::warning(pWidget,QObject::tr("warning"),QObject::tr("YES"),QMessageBox::Yes);
  break;
  case QMessageBox::No:
QMessageBox::warning(pWidget,QObject::tr("warning"),QObject::tr("NO"),QMessageBox::No);
  break;
  default:
  break; 
 }
 return app.exec();
}
qt中,QDialog::exec()以模态方式显示对话框,而QDialog::show()默认以非模态方式显示对话框。
进度对话框:
  QProgressDialog progress(tr("copying file..."),
  tr("cancel"),0,10000,this);
//第一个参数是字符窜,显示信息,第二个参数指定“取消”按钮显示的文本,如果参数为0,则没有取消按钮。
  progress.setWindowModality(Qt::WindowModal);
//模态方式显示对话框,用qApplication::processEvents()函数来保证事件循环中还可以处理其他事情,通过QProgressDialog::setValue()函数推进显示的进度,通过QProgressDialog::wasCancled()函数判度用户是否选择了取消按钮,通过qDebug()函数打印进度
  progress.setWindowTitle(tr("progress Dialg"));
  progress.show();
  for(int i=0;i<10000;i++){
   progress.setValue(i);
   qApp->processEvents();
   if(progress.wasCanceled())
    break;
   qDebug()<<i;  
  }
  progress.setValue(10000);

QWidget:
在控制台执行uic命令,可以把ui文件编译出.h文件,如:
uic -o ui_findfileform.h findfileform.ui 或者
uic findfileform.ui(直接输出到控制台)
浏览文件对话框:
QFileDialog::getExistingDirectory(this,
   tr("chose directory"),QDir::currentPath(),
   QFileDialog::ShowDirsOnly);
该函数打开一个文件对话框,返回路径,QDir::currentPath()获取应用程序路径,并初始化为对话框的当前目录。QFile::ShowDirsOnly指示对话框之显示目录。
递归查找文件
void CFindFileForm::tranvFolder(const QDir & dir,const QString & filename,
   const QString txt)
{
 if(m_bSubfolder)//判度是否包含子目录
 {
  QStringList folders;
  folders=dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
  //该函数获取但前文件夹目录下的所有自文件夹的列表保存在QStringList中,函数的参数指定过滤器,QDir::Dir表示之获取当前路径下的文件夹;QDir::NoDotAndDotDot表示获取的文件夹列表中不包含"."(当前目录)和".."(当前目录的上一级目录)目录。调用QApplication::processEvents()事件处理,以便应用程序即使在查找过程中也能够响应用户的"停止查找"或"关闭"操作。
  for(int i=0;i<folders.size();++i)
  {
   qApp->processEvents();
   if(m_bStoped) break;
 QString strDir=QString("%1%2").arg(dir.absolutePath()).arg(folders[i]);
   tranvFolder(strDir,filename,txt); 
  }  
 }
 QStringList files=findFiles(dir,filename,txt);
 //查找特定目录下文件,返回查找结果的文件列表
 showFiles(dir,files);
 m_nCount+=files.size();
 label_6->setText(tr("find %1 files").arg(m_nCount));
}

QStringList CFindFileForm::findFiles(const QDir &dir,
  const QString & fileName,const QString & txt)
{
 QStringList files=dir.entryList(QStringList(fileName),
  QDir::Files | QDir::NoSymLinks);
 //QDir::entryList(),第一个参数是QStringList类型的列表,指定了一个文件名字过滤器,第二个参数指定了另一个过滤器,QDir::Files表示只获取当前目录下的文件的名字(不包含目录,QDir::NoSymLinks表示返回的文件名列表不含系统的符号链接)
 if(txt.isEmpty()) return files;
 QStringList foundFiles;
 Qt::CaseSensitivity sensitive=Qt::CaseInsensitive;
 if(m_bSensitive)
 sensitive=Qt::CaseSensitive;
 for(int i=0;i<files.size();++i)
 {
  qApp->processEvents();
  if(m_bStoped) break;
  QFile file(dir.absoluteFilePath(files[i]));
  //QDir::absoluteFilePath()函数返回当前目录下一个文件的绝对目录  
  if(file.open(QIODevice::ReadOnly))
  //QIODevice::ReadOnly参数指定了只读方式打开
  {
   QString line;
   QTextStream in(&file);
   //QTextStream提供文本进行读写的操作.
   while(!in.atEnd())
   {
    if(m_bStoped) break;
    line=in.readLine();
   //QTextStream::readLine()对文件进行读入操作
  if(line.contains(txt,sensitive))
  //QString::contains()对文本包含进行判断,直到QTextSteam::atEnds()判断已经到了文件尾
  {
   foundFiles<<files[i];
   break;
  }  
   }
  }
 }
 return foundFiles;
}
在QTableWidget中添加数据;
信号和槽自动关联
例如:将browsePushBtn按钮的槽函数void browse()的clicked()单击信号修改为on_browsePushBtn_clicked(),就不需要加入connect()进行显式的调用。

 

你可能感兴趣的:(编程,UI,object,File,qt,编译器)