只看精华贴
  • HuRui
    2018/05/13 11:10
    HuRui发布了主贴最好的祝福--给妈妈
    Best Wishes to all of mothers and families,Thanks very much![/图片][/图片]----------------------  父母之恩,重如泰山,百善孝为先  -------------------
    查看详情>
  • HuRui
    2017/12/12 19:25
    HuRui发布了主贴2.2.1 Qt容器类 -- 2017.12.12
    2.2.1 QList类、QLinkedList类和QVector类      经常使用的Qt容器类有QList、QLinkedList和QVector等,在开发一个较高性能需求的应用程序时,程序员会比较关注这些容器类的运行效率。下表列出了QList、QLinkedList和QVector容器的时间复杂度比较      其中,“Amort.O(1)”表示,如果仅完成一次操作,可能会有O(n)行为:但是如果完成多次操作(如n次),平均结果将会是O(1)          QList  QLinkedList和QVectoer容器的时间复杂度比较容器类         查找      插入       头部添加       尾部添加QList          O(1)      O(n)       Amort.O(1)    Amort.O(1)QLinkedList    O(n)      O(1)        O(1)            O(1) QVector        O(1)      O(n)        O(n)         Amort.O(1)1.QList类   QList<T>是迄今为止最常用的容器类,它存储给定数据类型T的一列数值。继承QList类的子类有QItemSelection、QSignalSpy及QStringList和QTestEventList。   QList不仅提供了可以在列表进行追加的QList::append()和Qlist::prepend()函数,还提供了在列表中间完成插入操作的函数QList::insert()。相对于任何其他的Qt容器类,为了使可执行代码尽可能少,QList被高度优化   QList<T>维护了一个指针组织,该数组存储的指针方向QList<T>存储的列表项的内容。因此,QList<T>提供了基于下标的快速访问   对于不同的数据类型,QList<T>采取不同的存储策略,存储策略有以下几种   (1)如果T是一个指针类型或指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同),QList<T>会将数值直接存储在它的数组中。   (2)如果QList<T>存储对象的指针,则该指针指向实际存储的对象   下面举一个例子:    #include<QDebug>    int main    {        QList<QString>list;                               //(a)        {            QString str("This is a test string");                    list<<str;                                    //(b)                      }         qDebug()<<list<<"How are you!";                  //(c)         return 0;                                      }其中,(a)QList<<QString<<list: 声明一个QList<QString>栈对象(b)list>>str:通过运算操作符“<<”将一个QString字符串存储在该列表中。(c)程序中使用花括号“{”和“}”括起来的作用域表明,此时QList<T>保存了一个对象的复制2.QLinkedList类  QLinkedList<T>是一个链式列表,它以非连续的内存块保存数据  QLinkedList<T>不能使用下标,只能使用迭代器访问它的数据项。与QList相比,当对一个很大的列表进行插入操作时,QLinkedList具有更高的效率3.QVector类  QVector<T>在相邻的内存块中存储给定数据类型T的一组数值,在一个QVector的前部或者中间位置进行插入操作的速度是很慢的,这是因为这样的操作导致内存中的大量数据被移动,这是由QVector存储数据的方式决定的  QVector<T>既可以使用下标访问数据项,也可以使用迭代器访问数据项,继承自QVector类的子类有QPolygon、QPolygonF和QStack4.Java风格迭代器遍历容器  Java风格的迭代器是Qt4加入的一个功能,同STL风格的迭代器相比,它使用起来更加方便,不过这也是以轻微的性能损耗为代价的,对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即只读访问和读写访问。                      Java风格迭代器数据类型的两种分类  容器类                          只读迭代器类                  读写迭代器类QList<T>,QQueue<T>             QListIterator<T>         QMutableListIterator<T>QLinkedList<T>                 QLinkedListIterator<T>       QMutableLinkedListIterator<T>QVector<T>,QStack<T>           QVectorIterator<T>       QMutableVectorIterator<T>Java风格迭代器的迭代点(Java-style iterators point)位于列表项的中间,而不是直接指向某个列表项,因此,它的迭代点或者第一个列表项的前面,或者在两个列表项之间,或者在最后一个列表项之后。     下面以QList为例,介绍Java风格的两种迭代器的用法。QLinkedList和QVector具有和QList相同的遍历接口      实例:通过控制台程序实现QList只读遍历方法,对于Qt的一些类,如QString、QList等,不需要QCoreApplication(对于GUI用户界面程序则使用QApplication)的支持也能够工作,因此本例没有创建QCoreApplication对象,但是,在使用Qt编写应用程序时,如果本例没有创建建议初始化一个QCoreApplication对象;如果是GUI图形用户界面程序,则建议初始化QApplication对象。     代码如下:   #include<QDebug>   int main(int argc,char *argv[])   {       QList<int> list;                   //创建一个QList<int>栈对象list       list<<1<<2<<3<<4<<5;               //用操作运算符“<<”输入五位数       QListIterator<int> i(list);        //(b)       for(;i.hasNext();)                 //(c)           qDebug()<<i.next();                    return 0;       }/*其中,(a)头文件<QDebug>中已经包含了QList的头文件(b)QListIterator<int>i(list):以该list为参数初始化一个QListIterator对象i。此时,迭代点处在第一个列表项“1”的前面(注意,并不是指向该列表项)(c)for(;i.hasNext();):调用QListIterator<T>::hasNext()函数检查当前迭代点之后是否有列表项,如果有,则调用QListIterator<T>::next()函数进行遍历,next()函数将会跳过下一个列表项(即迭代点将位于第一个列表项和第二个列表项之间,)并返回它跳过的列表项的内容*/最后程序运行的结果为:1 2 3 4 5               [/图片]  - - - - - - - - - - - 害你加班的bug,就是我写的! - - - - - - - - - - - 
    查看详情>
  • HuRui
    2017/12/10 10:24
    HuRui发布了主贴2.2 Qt容器类 -- 2017.12.10
        Qt提供了一组通用的基于模板的容器类,对比C++的标准模板库中的容器类,Qt的这些容器更轻量、更安全并且更容易使用。此外,    Qt的容器类在速度、内存消耗和内联(inline)代码等方面进行了优化(较少的内联代码将会减少可执行程序的大小)    存储在Qt容器中的数据必须是可赋值的数据类型,也就是说,这种数据类型必须提供一个默认的构造函数(不需要参数的构造函数)、一个复制构造函数和一个赋值操作运算符。    这样的数据类型包含了通常使用的大多数数据类型,包括基本数据类型(如 int和double等)和Qt的一些数据类型(如QString、QDate和QTime等),不过,Qt的Object及其他的子类(如QWidget和Qdialog等)是不能够存储在容器中的,例如:QList<QToolBar>list;    上述代码是无法通过编译的,因为这些类(QObject及其他的子类)没有复制构造函数和赋值操作运算符  一个可代替的方案是存储QObject及其子类的指针,例如:  QList<QToolBar*>list;  Qt的容器类是可以嵌套的,例如:  QHash<QString,QList<double>>  其中,QHash的键类型是QString,它的值类型是QList<double>。注意,在最后两个“>”符号之间要保留一个空格,否则,C++编译器会将两个“>”符号解释为一个“>>”符号,导致无法通过编译器编译。  Qt的容器类为遍历其中的内容提供了以下两种方法:  (1)Java风格的迭代器(Java-style iterators)  (2)STL风格的迭代器(STL-style iterators),能够同Qt和STL的通用算法一起使用,并且在效率上也略胜一筹。                           [/图片]   - - - - - - - - - -  害你加班的bug,就是我写的! - - - - - - - - - -
    查看详情>
  • HuRui
    2017/11/22 17:20
        1122,一二一,一二一,听说今天有大事发生.........好事坏事,都先留个脚印...                             Qt字符串的转换QString类提供了丰富的转换函数,可以将一个字符串转换为数值类型或其他其他的字符编码集   (1)QString::toInt()函数将字符串转换为整型数值,类似的函数还有toDouble()、        toFloat()、toLong()、toLongLong()等。例如:    QString str="125";                    //初始化一个"125"的字符串    bool ok;      int hex = str.toInt(&ok,16);          //ok=true,hex=293    int dec = str.toInt(&ok,10);          //ok=true,hex=125   其中,int hex = str.toInt(&ok,16):调用QString::toInt()函数将字符串转换为整型数值,函数QString::toInt()有两个参数。第一个参数是一个bool类型的指针,用于返回转换的状态,当转换成功时设置为true,否则设置为false。第二个参数指定了转换的基数。当基数设置为0时,将会使用C语言的转换方法,即如果字符串以“0x”开头,则基础为16;如果字符串以“0”开头,则基数为8;其他情况下,基数一律是10。   (2)QString提供的字符编码集的转换函数将会返回一个const char*类型版本的QByteArray,即构造函数QByteArray(const char*)构造的QByteArray对象 QByteArray类具有一个字节数组,它既可以存储原始字节(raw bytes),也可以存储传统的以“\0”结尾的8位的字符串。在Qt中,使用QByteArray比使用const char*更方便,且QByteArray也支持隐式共享。转换函数有以下几种:   1>toAscii():返回一个ASCII编码的8位字符串   2>toLatin1():返回一个Latin-1(ISO8859-1)编码的8位字符串   3>toUtf8():返回一个UTF-8编码的8位字符串(UTF-8是ASCII码的超级,它支持整个Unicode      字符集)   4>toLocal8Bit():返回一个系统本地(locale)编码的8位字符串   例如:   QString str = "Welcome to you!";        //初始化一个字符串对象   QByteArray ba=str.toAscii();            //(a)   qDebug()<<ba;                           //(b)   ba.append("Hello,World!");              //(c)   qDebug()<<ba.data();                    //输出最后结果   其中,(a)QByteArray ba=str.toAscii():通过QString::toAscii()函数,将Unicode编码的字符串转换为ASCII码的字符串,并存储在QByteArray对象ba中   (b)qDebug()<<ba:使用qDebug()函数输出转换后的字符串(qDebug())支持输入的Qt对象   (c)ba.append("Hello,World!"):使用QByteArray::append()函数追加一个字符串   注意:NULL字符串和空(empty)字符串的区别   一个NULL字符串就是使用QString默认构造函数或者使用“(const char*)0”作为参数的构    造函数创建的QString字符串对象;而一个空字符串是一个大小为0的字符串。一个NULL字符    串一定是一个空字符串,而一个空字符串未必是一个NULL字符串。例如:   QString().isNull();       //结果为true   QString().isEmpty();      //结果为true   QString("").isNull();     //结果为true   QString("").isEmpty();    //结果为true                            [/图片]                     - - - - - - - - 害你加班的bug,就是我写的! - - - - - -  
    查看详情>
  • HuRui
    2017/11/13 17:50
       刚剁完手,是否该努力学习了?(学习是为了下次把脚也剁了....)   手没了,那鸭梨就给小点,不然担心消化不良.......查询字符串数据有很多方式,具体如下:  (1)函数QString::startsWithi()判断一个字符串是否以某个字符串开头。此函数具有两个参数。第一个参数指定了一个字符串,第二个参数指定是否大小写敏感(默认情况下,是大小写敏感的),例如:   QString str = "Welcome to you!";   str.startWith("Welcome",Qt::CaseSensitive);                 //返回true;   str.startsWith("you",Qt::CaseSensitive);                    //返回false;  (2)函数QString::endsWith()类似于QString::startsWith(),此函数判断一个字符串是否以某个字符串结尾  (3)函数QString::contains()判断一个指定的字符串是否出现过,例如:   QString str="Welcome to you!";   str.contain("Welcome",Qt::CaseSensitive);                  //返回true;  (4)比较两个字符串也是经常使用的功能,QString提供了多种比较手段   1>operator<(const QString&):比较一个字符串是否小于另一个字符串。如果是,则返回true   2>operator<=(const QString&):比较一个字符串是否小于等于另一个字符串。如果是,则返回true   3>operator==(const QString&):比较两个字符串是否相等。如果相等,则返回true   4>operator>=(const QString&):比较一个字符串是否大于等于另一个字符串。如果是,则返回true   5>localeAwareCompare(const QString&,const QString&):静态函数,比较前后两个字符串。如果前面两个字符串小于后面字符串,则返回负整数值;如果等于则返回0;如果大于则返回正整数值。该函数的比较是基于本地(locale)字符集的,而且是平台相关的。通常,该函数用于向用户显示一个有序的字符串列表。   6>compare(const QString&,const QString&,Qt::CaseSensitivity):该函数可以指定是否进行大小写的比较而大小写的比较是完全基于字符的Unicode编码值的,而且是非常快的,返回值类似于localeAwareCompare()函数             [/图片]        - - - - - - -  害你加班的bug,就是我写的! - - - - - - - - - - 
    查看详情>
  • HuRui
    2017/11/10 15:59
           第2章 -- Qt5模板库、工具类及控件      --- 2017.11.9 简单介绍Qt字符串类QString、Qt容器类、QVariant类及Qt常用的算法和基本正则表达式2.1字符串类                标准C++提供了两种字符串:一种是C语言风格的以“\0”字符结尾的字符数组;另一种是字符串类String,而Qt字符串类QString功能更强大。   QString类保存16位Unicode值,提供了丰富的操作、查询和转换等函数。该类还进行了使用隐式共享(implicit sharing)、高效的内存分配策略等方面的优化。2.1.1操作字符串       字符串有如下几个操作符   (1)QString提供了一个二元的“+”操作符用于组合两个字符串,并提供了一个“+=”操作符用于将一个字符串追加到另一个字符串的末尾,例如:    QString str1 = "Welcome";    str1=str1+"to you!";                //str1="Welcome to you!"    QString str2 = "Hello,";    str2+="World";                      //str2="Hello,World!"       其中,QString str1 = "Welcome"传递给QString一个const char*类型的ASCII字符串“Welcome”,它被解释为一个典型的“\0”结尾的C类型字符串。这将会导致调用QString构造函数,来初始化一个QString字符串。其构造函数原型为:  QT_ASCII_CAST_WARN_CONSTRUCTOR QString::QString(const char* str)  被传递的const char*类型的指针又将被函数QString::fromAscii()转换为Unicode编码。默认情况下,函数QString::fromAscii()会江超过128的字符作为Latin-1进行处理(可以通过调用QTextCode::setCodeForCString()),函数改变QString::fromAscii()函数的处理方式)  此外,在编译应用程序时,也可以通过定义QT_CAST_FROM_ASCII宏变量屏蔽该构造函数。如果程序员要求显示给用户的字符串都必须经过QObject::tr()函数的处理,那么屏蔽QString的这个构造函数是非常有用的。  (2)QString::append()函数具有与“+=”操作符同样的功能,实现在一个字符串的末尾追加另一个字符串,  例如:  QString str1 = "Welcome";  QString str2 = "to";  str1.append(str2);              //str1="Welcome to"  str1.append("you!");            //str1="Welcome to you!"  (3)组合字符串的另一个函数是QString::sprintf(),此函数支持的格式定义符和C++库中的函数sprintf()定义一样。 例如:  QString str;  str.sprintf("%s"," Welcome ");                         //str="Welcome"  str.sprintf("%s"," to you! ");                         //str="to you!"  str.sprintf("%s %s","Welcome","to you!");              //str="Welcome to you!"  (4)Qt还提供了另一种方便的字符串组合方式,使用QString::arg()函数,此函数的重载可以处理很多的数据类型,此外,一些重载具有额外的参数对字段的宽度、数字基数或者浮点数精度进行控制。通常,相对于函数QString::sprintf(),函数QString::arg()是一个比较好的解决方案,因为它类型安全,完全支持Unicode,并且允许改变"%/n"参数的顺序,例如:  QString str;  str=QString("%1 was born in %2.").arg("John").arg(1982);       //str="John was born in 1982."  其中,"%1"被替换为"John","%2"被替换为"1982"  (5)QString也提供了一些其他组合字符串的方法,包括以下几种:   1>insert()函数: 在原字符串特定的位置插入另一个字符串。   2>prepend()函数:在原字符串的开头插入另一个字符串。   3>replace()函数:用指定的字符串代替原字符串中的某些字符。  (6)很多时候,去掉一个字符串两端的空白(空白字符包括回车字符"\n"、换行字符"\r"、制表符"\t"和空格符“”等)非常有用,如获取用户输入的账号时。   1>QString::trimmed()函数:移除字符串两端的空白字符   2>QString::simplified()函数:移除字符串两端的空白字符,使用单个空格字符“”代替字符中出现的空白字符,例如:   QString str = "Welcome \t to \n you! ";   str=str.trimmed();                     //str="Welcome \t to \n you! "   在上述代码中,如果使用str=str.simplified(),则str的结果是"Welcome to you!"                           [/图片]             - - - - - - - -  害你加班的bug,就是我写的! - - - - - - - - - 
    查看详情>
  • HuRui
    2017/11/08 15:46
        实践是检验真理的唯一标准,而概念是检验的充分条件...伙伴编辑模式(Edit Buddy)QLabel标签和伙伴(buddy)窗口部件包括一个标签(QLabel)和一个窗口部件,它们具有伙伴关系,即指当用户激活标签的快捷键时,鼠标/键盘的焦点将会转移到它的伙伴窗口部件上。只有QLabel标签对象才可以有伙伴窗口部件,也只有该QLabel对象具有快捷键时(在显示文本的某个字符前面添加一个前缀“&”,就可以定义快捷键),伙伴关系才有效,例如:QLineEdit *ageLineEdit = new QLineEdit(this);QLabel* ageLabel = new QLabel("age",this);ageLabel->setBuddy(ageLineEdit);代码定义了ageLabel标签的组合键为【Alt+A】,并将行编辑框ageLineEidt设为它的伙伴窗口部件。所以当用户按下组合键【Alt+A】时,焦点将会跳至行编辑框ageLineEidt中,Qt设计器提供了伙伴编辑模式,可通过鼠标拖曳快捷地建立标签QLabel和其他窗口部件的伙伴关系1.信号和槽机制(Signal & Slot)Qt提供了信号和槽机制用于完成界面操作的响应,是完成任意两个Qt对象之间的通信机制。其中,信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数。 例如,若要将一个窗口部件的变化情况通知给另一个窗口部件,则一个窗口部件发送信号,另一个窗口部件的槽接收此信号并进行相应的操作,即可实现两个窗口部件之间的通信。每个Qt对象都包含若干个预定义的槽,当某一个特定事件发生时,一个信号被发送,与信号相关联的槽则会响应信号并完成相应的处理,当一个类被继承时,该类的信号和槽也同时被继承,也可以根据需要自定义信号和槽1>信号与槽机制的连接方式(1)一个信号可以与另一个信号相连,代码如下:connect(Object1,SIGNAL1),Object2,SIGNAL(signal1));表示Object1的信号1发送可以触发Object2的信号1发送(2)同一个信号可以与多个槽相连,代码如下:connect(Object1,SIGNAL2),Object2,SIGNAL(slot2));connect(Object3,SIGANL2),Object3,SIGNAL(slot1));(3)同一个槽可以响应多个信号,代码如下:connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slot2));connect(Object3,SIGNAL(signal2),Object2,SIGNAL(slot2));但是,常用的连接方式为:connect(Object1,SIGNAL(signal1),Object2,SLOT(slot));其中,signal为对象Object1的信号,slot为对象Object2的槽SIGNAL()和SlOT()是Qt定义的两个宏,它们返回其参数的C语言风格的字符串(const char*),因此,下面关联信号和槽的两个语句是等同的:connect(button,SIGNAL(clicked()),this,SLOT(showArea()));connect(button,"clicked()",this,"showArea()");2>信号与槽机制的优点(1)类型安全。需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数与接收该信号的槽的参数类型和参数个数相同,不过,一个槽的参数个数是可以少于信号的参数个数的,但缺少的参数必须是信号参数的最后一个或几个参数,如果信号和槽的签名不符,编译器就会报错。(2)松散耦合。信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无须知道是哪个对象的哪个槽需要接收它发出的信号,它只需做的是在适当的时间发送适当的信号就可以了,而不需要知道也不关心它的信号有没有被接收到,更不需要知道是哪个对象的哪个槽接收到了信号,同样,对象的槽也不知道是哪些信号关联了自己,而一旦管理信号和槽,Qt就保证了适合的槽得到了调用。即使关联的对象在运行时被删除,应用程序也不会崩溃一个类若要支持信号和槽,就必须从QObject或QObject的子类继承。注意,Qt信号和槽机制不支持对模板的使用3>信号与槽机制的效率信号和槽机制增强了对象间通信的灵活性,然而这也损失了一些性能。同回调函数相比,信号和槽机制运行速度有些慢,通常,通过传递一个信号来调用槽函数将会比直接调用非虚函数运行速度慢10倍,原因如下:(1)需要定位接收信号的对象(2)安全地遍历所有的关联(如一个信号关联多个槽的情况)(3)编组(marshal)/解组(unmarshal)传递的参数(4)多线程的时候,信号可能需要排队等待然而,与创建堆对象的new操作即删除堆对象的delete操作相比,信号和槽的运行代价只是它们很少的一部分,信号和槽机制导致的这点性能损耗,对实时应用程序是可以忽略的;同信号和槽提供的灵活性和简便性相比,这点性能的损失也是值得的Qt5元对象系统Qt元对象系统提供了对象间的通信机制(信号和槽)、运行时类型信息和动态属性系统的支持,是标准C++的一个扩展,它使Qt能够更好地实现GUI图形用户界面编程。Qt的元对象系统不支持C++模板,尽管模板扩展了标准C++的功能,但是元对象系统提供了模板无法提供的一些特性。Qt元对象系统基于以下三个事实。(1)基类QObject:任何需要使用元对象系统功能的类必须继承自QObject(2)Q_OBJECT宏:Q_OBJECT宏必须出现在类的私有声明区,用于启动元对象的特性(3)元对象编译器(Meta-Object Complier,moc):为QObject子类实现元对象特性必须提供必要的代码实现L3 布局管理器在设计较复杂的GUI用户界面时,仅通过指定窗口部件的父子关系以期达到加载和排列窗口部件的方法是行不通,最好的办法是使用Qt提供的布局管理器。QGridLayout *mainLayout = new QGridLayout(this);      //(a)mainLayout->addWidget(label1,0,0);                    //(b)mainLayout->addWidget(lineEdit,0,1);mainLayout->addWidget(label2,0,1);mainLayout->addWidget(button,1,1);setLayout(mainLayout);                                //(c)其中,(a)QGridLayout *mainLayout=new QGridLayout(this):创建一个网格布局管理器对象mainLayout,并用this指出父窗口(b)mainLayout->addWidget(...):分别将控件对象label1,lineEdit、label2和button放置在该管理器中,还可以在创建布局管理器对象时不必指明父窗口(c)QWidget::setLayout(...):将布局管理器添加到对应的窗口部件对象中,因为这里的主窗口就是父窗口,所以直接调用setLayout(mainLayout)即可                                    [/图片]             - - - - - - - - - 害你加班的bug,就是我写的 - - - - - - - - - 
    查看详情>
  • HuRui
    2017/11/07 15:55
       纯代码实现窗口界面和计算圆面积功能,神奇宝贝啊.............创建一个新工程,项目命名为:Dialog   取消“创建界面”复选框的选中状态在上述工程的dialog.h中加黑代码:class Dialog : public QDialog{    Q_OBJECTpublic:   Dialog(QWidget *parent = 0);   ~Dialog();private:        //下面三行代码加黑部分(这里用红色提示)   QLabel *label1,*label2;   QLineEdit *lineEdit;   QPushButton *button;};此时,需要在文件最开始加入头文件:  (在文件中用到哪个类时,需要此文件开始部分引用包含此类的头文件)#include<QLabel>#include<QLineEdit>#include<QPushButton>//其中,Q_OBJECT宏的作用是启动Qt元对象系统的一些特性(如支持信号和槽等),它必须放置到类定义的私有区在dialog.cpp中添加如下代码:Dialog::Dialog(QWidget *parent){    label1 = new QLabel(this);    label1->setText(tr("请输入圆的半径:"));    lineEdit = new QLineEdit(this);    label2=new QLabel(this);    button=new QPushButton(this);    button->setText(tr("显示对应圆的面积"));    //用于布局管理器,将所有空间的位置固定    QGirdLayout *mainLayout = new QGridLayout(this);        mainLayout->addWidget(Label1,0,0);    mainLayout->addWidget(LineEdit,0,1);    mainLayout->addWidget(label2,1,0);    mainLayout->addWidget(button,1,1);    }注意:在此文件开头处添加头文件#include<QGridLayout>     以上代码完成了界面设计下面同样通过两种触发不同控件事件的方式完成计算圆面积的功能方式1:在“LineEdit”文本框输入所需圆的半径值,单击“显示对应圆的面积”按钮后,在label2中显示相对应的圆的面积值(1)打开dialog.h文件,在类构造函数和控件成员声明后,添加如下加黑代码:class Dialog:public QDialog{    ......    QPushButton *button;//加黑部分,声明槽private slots:    void showArea();}(2)打开dialog.cpp文件,在构造函数中添加如下加黑代码Dialog::Dialog(QWidget *parent):QDialog(parent){    ......    mainLayout->addWidget(button,1,1);    connect(button,SIGNAL(clicked()),this,SLOT(showArea()));    //加黑部分}(3)在showArea()中实现显示圆面积功能void Dialog::showArea(){     bool ok;     QString tempStr;     QString valueStr = lineEdit->text();     int valueInt = valueStr.toInt(&ok);     double area = valueInt*valueInt*PI;     label2->setText(tempStr.setNum(area));}(4)在此文件开始处添加全局变量:const static double PI = 3.1416;(5)在“LineEdit”文本框中输入圆半径值,单击“显示对应圆的面积”按钮后,在Label2中显示圆面积值方式2: 在“LineEdit”文本框中输入所需圆的半径值后,不必单击“显示”对应圆的面积按钮,直接在label2中显示圆的面积值,操作步骤和方式1相同,只是在上述第(2)步骤中,添加的代码修改为如下加黑代码:Dialog::Dialog(QWidget *parent):QDialog(parent){    ......    mainLayout->addWidget(button,1,1);   connect(lineEdit,SIGANL(textChanged(QString)),this,SLOT(showArea()));//加黑部分 }                     效果图:[/图片]           - - - - - - - - - - 害你加班的bug,就是我写的! - - - - - - - - -
    查看详情>
  • HuRui
    2017/11/03 15:17
       时间就是金钱,不说废话,在Qt程序开发中,除了可以通过手敲代码实现软件开发功能外,还可以通过Qt的GUI界面设计器(Qt Designer)进行界面的绘制和布局。该工具提供了Qt基本的可绘制窗口部件,如QWidget、QLabel、QPushButton、QVBoxLayout。在设计器中通过鼠标直接拖曳这些窗口部件,能够高效、快速实现GUI界面的设计,界面直观形象,所见即所得,如下:[/图片]      选中Qt设计器“控件”→“视图”→“锁定”,可以使编辑工具固定或悬浮于设计器中。   对象查看器(Object Inspector):列出了界面中所有窗口部件,以及各窗口部件的父子关系和包容关系   属性编辑器(Property Editor):列出了窗口部件可编辑的属性   Action编辑器(Action Editor):列出了为窗口部件设计的QAction动作,通过“添加”或“删除”按钮可以新建一个可命名的QAction动作或删除指定的QAction动作   信号和槽编辑器(Signal/Slot Editor):列出了在Qt设计器中关联的信号和槽,通过双击列中的对象或信号/槽,可以进行对象的选择和信号/槽的选择    此外,通过Qt设计器的“编辑”菜单,可以打开Qt设计器的四种GUI窗口部件编辑模式    控件编辑模式(Edit Widgets):可以在Qt设计器中添加GUI窗部件并修改它的属性和外观    信号/槽编辑模式(Edit Signal/Slots):可以在Qt设计器中的窗口部件上关联Qt已经定义好的信号和槽   伙伴编辑模式(Edit Buddy):可以在Qt设计器中的窗口部件上建立QLabel标签和其他部件的伙伴关系   Tab编辑模式(Edit Tab Order):可以在Qt设计器中的窗口部件上设置Tab键在窗口部件上的焦点顺序   举个小栗子:(源码可酌情分享..) [/图片]   - - - - - - - - - - - - - - -  害你加班的bug,就是我写的 - - - - - - - - - - -                                [/图片] 
    查看详情>
  • HuRui
    2017/11/02 14:34
      前段时间发车,车超载(关于Qt软件的安装....知识点可能稍多),今天车修好的7788了..  Time is money,老司机的车从不等人.........下面的介绍纯手工,且看且珍惜...  什么是Qt?  Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形用户界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。(什么是组件编程,后面会提,着急的可以其他渠道科普一下..)  Qt最早是在1991年由奇趣科技开发的,1996年进入商业领域,成为全世界范围内数千种成功的应用程序的基础。也是目前流行的Linux桌面环境KDE的基础,KDE是Linux发行版的主要一个标准组件。2008年,奇趣科技被诺基亚公司收购,Qt成为诺基亚旗下的编程语言工具:2012年,Qt又被Digia公司收购。  重点,重点,重点在以下一段:  Qt支持的平台有:  Windows-XP  Vista  Win7  Win8  Win2008, 当然还有今天的Win10(我目前的系统亲测)  UNIX/X11-Linux、Sun Solaris、HP-UX、Compaq Tur64 UNIX、IBM AIX、SGIIRIX、        FreeBSD、BSD/OS和其他很多X11平台。  Macintosh-Mac OS X  Embedded-有帧缓冲(framebuffer)支持的嵌入式Linux平台、Windows CE  题外话:目前公司因为产品需求,从Windows CE平台向Linux平台移植...........  Qt按照不同的版本发行,分为商业版和开源版。Qt商业版为商业软件提供开发,提供传统商业软件发行版,并且提供在协议有效期内的免费升级和技术支持服务。而Qt开源版是为了开发自由而设计的开放源码软件,提供了和商业版本同样的功能,在GNU通用公证许可证下,它是免费的...(除了房价不会跌,你怕什么?...这句话我说的....)    打字太累了,广告时间,下期再会.............. Thanks! 老司机的车不等人.....                [/图片]
    查看详情>
  • HuRui
    2017/09/09 09:44
    HuRui发布了主贴久违的久久
      吃完早餐,坐在窗边,安静的迎着秋风,晒上几分钟的太阳,难得的是:  给过去一周的烦恼杀杀菌,给未来一周的心情升升温   ----  Ruijiao  2017.9.9  [/图片]
    查看详情>
  • HuRui
    2017/08/12 10:06
    简单点,装B的方式简单点,小司机们准备好擦亮眼睛,直接上无码高清图了...........1.[/图片]2.[/图片]3.[/图片]4.[/图片]5.[/图片]6.[/图片]7.[/图片]8.[/图片]9.[/图片]10.[/图片]不多,也就10张图,是不是一大片小司机,已倒?........站起来撸(代码)啊....啊。。。
    查看详情>

关于Ta

  • 主贴 35
  • 回复 567
  • 课程 9
  • 关注 4
  • 粉丝 17

最近访客

  • 1722900271

    2019-09-13 11:32

  • 长春-谨守

    2019-01-31 04:51

  • 2班-广东-杰

    2018-12-21 00:08

  • 孙中文老师

    2018-10-15 21:49

  • 班主任-胡铭宽

    2018-09-05 10:04

下载社区APP,查看更多访客

更多福利 在线客服 下载APP 意见反馈

扫描二维码下载APP

下载邢帅APP,缓存视频随身看

关注邢帅教育,领取更多福利

关注邢帅教育,领取更多福利