zoukankan      html  css  js  c++  java
  • Qt中的一些知识小结(转)

    1. QCreator(2.5.0)安装的时候已经不自带MinGW,因此要自行安装.当然我们也可以用VS的编译器进行编译,这样装了微软的VS后我们在QtCreator中设置好微软的编译器目录,然后在QtCreator中进行编写代码,编译调试等.

    2. Qt从源代码编译容易忽略的Perl问题

      如何从源代码编译Qt,那就是编译前先安装Perl,因为里面有些脚本是用Perl写的,如果不安装的话,在configure的时候会导致这些脚本不能执行,因此会少复制很多文件到指定的文件夹,那么编译的时候就会出现“找不到文件”之类的错误。这个是必须要安装的,win下可以直接安装activeperl即可。

    3. Qt 3.x支持setMainWidget,但是Qt4已经取消了对setMainWidget的支持。

    4. 4.3之后就没有了QVbox,取而代之的是QVBoxLayout类;
    5. Qt中用来显示图片的控件为Label后者用TextBrowser.当用Label显示时,需要用setPixmap函数,且该函数对应传入与图像相关的参数为图像的数据部分;当用TextBrowser显示时,直接用append函数即可。该函数对应传入与图像相关的参数为图像的文件名(要包含路径)。
    6. 显示文本的控件为TextBrowser.
    7. 获得spinBox的值是调用其value()函数。
    8. 获得LineEdit的值是调用其text()函数,然后转换成相应的数据类型即可。
    9. .ui中的close函数只是关闭窗口的显示功能而已,并没有delete掉里面的变量。
    10.  QPalette为调色版,其颜色组分为3组,活动组,非活动组.
    11. 可用组;其中活动组为当前窗口所在组,非活动组为其它窗口所在组,不可用组是由于某种原因暂时不能使用的组 。改变调色版的颜色可以使用setColor这个函数,这个函数有2个重载函数,其中参数ColorRole表示是更改哪个参数;比如说一般的背景色。
    12. EditLine背景色颜色角色为QPalette::Base;前景色文字的颜色角色为QPalette::Text.
    13. Button背景色颜色角色为QPalette::Button.前景色文字的颜色角色为QPalette::ButtonText.
    14. Label前景文字颜色角色为QPalette::WindowText.
    15.  当在TextBrowser中进行图片显示时,如果需要让显示图片的窗口自适应图片的大小,可采用QTextBrowser下的setFixedWidth()和setFixedHeight()函数来设置窗口尺寸,其参数是从图片中获取。当然这个设置的窗口长和宽已经包括了右边和下边的滚动条,所以给参数的时候需要把这2者考虑进去。
    16. 要对整个窗口的背景该色,且不改变其上面控件的背景色,则这时需用QPalette类。且时需用Window作为背景色角色;如果用Base作为背景色角色的话,那么它只会改变QTextEidt类及其派生类的背景色;如果用seStyleSheet,其用background-color的话,那么它会把其上面的控件背景色全改了,且相应的子窗口的也都改了。
    17. 在Qt中,将1个数值a转换成文本,可采用,tr(“%1”).arg(a).也可采用QString::number(a).
    18.  实际运行到这几句代码时,并不是显示完first,延时1s后显示second,再延时1s后显示third. 而是直接延时2秒,first,second,third同时显示呢? 
    19. setCentralWidget()函数是把控件布满整个界面的语句。
    20.  在Qt程序其中的一个函数中,如果需要调用另一个窗口类且显示出来,则有2种方法。其一是在本类中定义一个全局变量,然后在这个函数中new一个对象。如下所示:

      void MainWindow::on_actionNew_Window_triggered()

      {

      my_dailog = new Dialog(this);

      my_dailog->show();

      }

      这种情况下建立的窗口时非模态的,且可以同时调出多个my_dialog窗口来。

      另外一种方法是在程序内部定义一个类对象,如下所示:

      void MainWindow::on_actionNew_Window_triggered()

      {

      Dialog my_dialog;

      my_dialog.setModal(false);

      my_dialog.exec();

      }

      但是不管其模态设置是否为true,该窗口都是模态的,即该窗口显示出来时其它的窗口不能工作了。当然此时只能显示1个my_dialog了。

      20. 如果想要窗口内部的控件大小随着窗口拉伸等变化而变化,则需要在布局中设置,点击ui文件中的主体,然后选择布局控件中满足自己需求的一个即可。

      21. window下的路径名需要用2个左斜杠或者1个右斜杆。即”/”或者””。

      22. 在界面中设置显示的文字属性,如果在cpp中被重新设置了,那么运行时是以cpp中设置的最后的设置,因为这些属性被覆盖掉了.

      23. 在Qt Designer界面设计中,label中显示的内容各种属性都可以设置,比如字体格式,颜色等.但是PushButton中显示的字体在属性栏就只能更改其内容。如果要更改其它属性则需要在代码中实现。

      24. 一般信号中的toggled是指对应的属性为checkable,然后被鼠标单击了下而发射的。这个在复选按钮和单选按钮中比较常见,但是在PushButton中也是可以用的,将PushButton的属性checkable设置为真,则运行时鼠标单击一下,按钮的颜色会变淡,再单击一下又会变亮,它是以颜色的的深浅来提醒它的toggle的。

    菜单栏中的一个选项,一般是用trigger来发射信号。

      25. Qt的MessageBox中比较常用的是,MessageBox::warning(),MessageBox::information,MessageBox:YES等。

      26. 在LineEdit中有一个echoMode,里面可以选中password模式,则在LineEdit中输入的内容对用户是不可见的,当然对系统是可见的,我们可以将其内容读取出来。

      27. Cmobo Box中增加一项用的是addItem()函数。例如:

    ui->comboBox->addItem("China");

      28. Qt中QListView是基于Model的,QListWidget是基于Item的。

      29. 如果是用QListWidget的话,加入内容采用的是addItem()方法。

      30. 头文件和对应的源文件可以同时include同一个头文件。

      31. 用滑动条触发进度条的实验中,至少有下面3种方法可以执行。

      可以直接在界面设计的信号与槽中连接好对应的信号与槽。无需任何代码。

      在界面的构造函数中用connect函数连接好信号与槽,也无需其他代码。如下:

      connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), ui->progressBar, SLOT(setValue(int)));

      可以在滑动条值改变的槽函数中实现,如下:

      void Dialog::on_horizontalSlider_valueChanged(int value)

      {

      ui->progressBar->setValue(ui->horizontalSlider->value());

      }

      32. 让状态栏显示文本不是采用setText()方法,而是采用showMessage().其第二个参数为显示该内容持续的时间,以毫秒为单位。

      33. 如果在Qt Creator中需要带参数运行,因为在main函数中经常有argv这个变量传入参数,这可以在Qt Creator的左侧Project一栏中—>Targets—>Desttop(中间偏上的位置)—>Run    —>Arguments中输入需要附加的参数即可。

      34. QtextEdit除了用append()函数显示图片外,还可以用insertHtml()函数和setPlainText()来显示,用法类似,其中insertHtml()可以用来显示图片和有格式的文字,而setPlainText()只能用来显示无格式的文字。

      35. Qt Gui界面的显示是在程序的构造函数执行完后完成的,所以如果在构造函数中对界面有动态的输出效果我们是看不到的,只能都构造函数执行完了后才能看到最后的结果。那么怎么办才能做到在构造函数结束时自动调用某一程序来完成我们想要看到的动态初始化效果呢?这里可以使用QTimer下的singleShot()函数。

      36. Qtimer::singleShot(0, this, SLOT(event()));

      37. 其中第一个参数为时隔多长(单位为ms)执行后面的event信号函数,当然该函数的函数名可以自己定义。这句代码的意思是立即执行执行event()函数。

    和sleep()函数一样,在Qt中也不能用opencv中的waitKey()函数来进行延时。

        

  • 相关阅读:
    我爱java系列之---【Sublime Text编辑远程Linux服务器上的文件】
    我爱java系列之---【发送请求消息的中间件—okhttp】
    Backpack
    Interleaving String
    Edit Distance
    Longest Common Subsequence
    Jump Game II
    Unique Paths II
    Climbing Stairs
    Triangle -- C3
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/2845422.html
Copyright © 2011-2022 走看看