QT开发日记

来源:互联网 发布:印刷报价小秘书软件 编辑:程序博客网 时间:2024/06/11 03:20

1,在使用MOC的时候,Q_OBJECT这个宏不能用在一个类的定义文件中,只能在单独作为一个类的声明文件中用,否则会出现“vtable for XXXX(类名)”的出错提示。如果一个类只声明了,而没有定义,也会出现上述错误. 这时可以在这个文件的末尾加上#include "xxxxxx.moc"(xxxxx为不要.cpp后缀的文件名)便不会出错了。

 

2,在使用QMultilineEdit这个类的时候,我得出以下这个结论:clear之后setText之后再text可以得到文本;clear之后insertLine之后再text不能得到文本(得到null),这时可以用textLine得到文本;不用clear,insertLine之后再text可以得到文本。

 

3,在QTextView中显示的字符串,如果首尾分别以及标志,那么原来的换行将会被忽略。如果将QTextView的对象设置为setTextFormat(RichText),那么同样会忽略原来的换行符。

 

4,构造QTextStream

1--------》
    QByteArray array;
    QTextStream ts( array, IO_WriteOnly );
    ts << "pi = " << 3.14 << '\0';     // array == "pi = 3.14"
这段代码相当于:
1--------》
    QByteArray array;
    QBuffer buf( array );
    buf.open( IO_WriteOnly );
    QTextStream ts( &buf );
    ts << "pi = " << 3.14 << '\0';              // array == "pi = 3.14"
    buf.close();
这是因为在QTextStream.cpp里有这样的定义:
QTextStream::QTextStream( QByteArray a, int mode )
{
    init();
    dev = new QBuffer( a );
    ((QBuffer *)dev)->open( mode );
    owndev = TRUE;
    setEncoding( Latin1 ); //### Locale???
    reset();
    d->sourceType = QTextStreamPrivate::ByteArray;
}
也就是说1中的在构造QTextStream的时候,已经要构造一个QBuffer。


5,QStringList是一个拥有多个QString对象的QValueList,它不同于QStrList,QStrList保存的是一个字符集指针,而QStringList保存的是一个真实的QString对象集。
像QString一样,QStringList对象之间是隐含共享的,它们通过围绕一个值参来达到快速安全的目的。
例:
        QStringList list;

        // three different ways of appending values:
        list.append( "Torben");
        list += "Warwick";
        list << "Matthias" << "Arnt" << "Paul";

        // sort the list, Arnt's now first
        list.sort();

        // print it out
        for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
            printf( "%s \n", (*it).latin1() );
        }
QStringList拥有诸如sort(),split(),join()及grep()这样的方法使QStringList操作更方便。

QStringList类提供了一个字符串列表
从QList <QString>继承而来,它提供快速索引为基础的接入以及快速插入和清除
其成员函数用于操作这个字符串列表如
append(),insert(), replace(), removeAll(), removeAt(), removeFirst(), removeLast(), and removeOne()等
1. 增加字符串
   可以通过append(),或使用<<,如
   QStringList fonts;
   fonts << "Arial" << "Helvetica" << "Times" << "Courier";
   // fonts:[ "Arial" ,"Helvetica", "Times" , "Courier"]
2. 合并字符串使用join( )
   QString str = fonts.join(",");
   // str == "Arial,Helvetica,Times,Courier"
3. 拆分字符串
   QString str = " Arial,Helvetica, ,Times,Courier ";
   QStringList list1 = str.split(",");
   // list1: [ " Arial ", " Helvetica ",” “, " Times ", " Courier " ]
   QStringList list2 = str.split(",", QString::SkipEmptyParts);
   // list2: [ " Arial ", " Helvetica ", " Times ", " Courier " ]
   也就是说如果有QString::SkipEmptyParts,空项不会出现在结果。默认情况下,空项被保留
4. 索引
   IndexOf()函数返回给定字符串的第一个出现的索引。
   而lastIndexOf()函数,返回字符串的最后一次出现的索引。
5. 替换replaceInStrings()
   QStringList files;
   files << "$QTDIR/src/moc/moc.y"
   << "$QTDIR/src/moc/moc.l"
   << "$QTDIR/include/qconfig.h";
   files.replaceInStrings("$QTDIR", "/usr/lib/qt");
   // files: [ "/usr/lib/qt/src/moc/moc.y", ...]
6. 过滤filter()
   可以让你提取一个新的列表只包含这些字符串包含一个特定的字符串(或匹配特定正则表达式):
   QStringList list;
   list << "Bill Murray" << "John Doe" << "Bill Clinton";
   QStringList result;
   result = list.filter("Bill");
   // result: ["Bill Murray", "Bill Clinton"]

7.遍历

  QList<QString>::Iterator it = user.begin(),itend = user.end();
  int i = 0;
  for (;it != itend; it++,i++){
   if (*it == pFindLine->text()){//找到,高亮显示
    QModelIndex index = model->index(i);
    m_pTabList->setCurrentIndex(index);
    break;
   }
  }



原创粉丝点击