QT における一般的な問題のまとめ

この記事は超良い記事だと思います、まさに神記事です

  1. QtCreator はコンパイルに MinGW を使用するため、Windows で QtCreator をダウンロードしたい場合は、vs の代わりに対応する mingw バージョンをダウンロードする必要があります。そうしないとコンパイルできません。または、Qt ソース ライブラリを自分でダウンロードし、Cmake を使用して MinGW を選択して再コンパイルします。
  2. したがって、Windows 用 Qt ライブラリ 4.8.2 (minGW 4.4、318 MB) をインストールする場合は、QtCreator のインストール中に MinGW が自動的にインストールされ、Windows 用 Qt ライブラリ 4.8.2 (minGW 4.4、318 MB )がインストールされるため、最初に QtCreator をインストールする必要があります。インストールでは再度 MinGW を使用する必要があります。したがって、両者の順序を逆にすることはできません。
  3. ただし、QtCreator2.5.0以降、MinGWはバンドルされなくなり、ユーザーが自分でダウンロードしてインストールする必要があります。Qt 公式 Web サイトに記載されているダウンロード アドレスは、ftp://ftp.qt.nokia.com/misc/MinGW-gcc440_1.zipです。
  4. もちろん、VS コンパイラを使用してコンパイルすることもできるので、Microsoft VS をインストールした後、QtCreator で Microsoft コンパイラのディレクトリを設定し、QtCreator でコードを記述し、コンパイルとデバッグを行います。
  5. Microsoft デバッガーを使用する場合は、dbg_x86_6.11.1.404.msi をインストールできます。インストール後、QtCreator は dbg デバッガーを自動的に認識します。
  6. Qtで画像を表示するコントロールはLabelで、後者はTextBrowserを使用しますが、Labelで表示する場合はsetPixmap関数を使用する必要があり、この関数は画像に関するパラメータを渡す画像のデータ部分に相当します。 ; TextBrowser を使用して表示する場合は、直接 append 関数を使用するだけです。この関数は、画像に関連するパラメータを画像のファイル名として (パスを含めて) 渡すことに対応します。
  7. テキストを表示するコントロールは TextBrowser です。
  8. SpinBox の値を取得するには、その value() 関数を呼び出します。
  9. LineEdit の値を取得するには、その text() 関数を呼び出して、対応するデータ型に変換します。

  10. ui の close 関数はウィンドウの表示関数を閉じるだけで、内部の変数は削除されません。

  11. QPalette はパレットで、そのカラーグループはアクティブグループ、非アクティブグループ、

  12. 使用可能なグループ。アクティブなグループは現在のウィンドウが配置されているグループ、非アクティブなグループは他のウィンドウが配置されているグループ、使用不可のグループは何らかの理由で一時的に使用できないグループです。パレットの色を変更するには、setColor 関数を使用できます。この関数には 2 つのオーバーロード関数が含まれており、パラメータ ColorRole はどのパラメータを変更するかを示します (一般的な背景色など)。

  13. EditLine の背景色の色の役割は QPalette::Base であり、前景色のテキストの色の役割は QPalette::Text です。

  14. ボタンの背景色の色の役割は QPalette::Button、前景色のテキストの色の役割は QPalette::ButtonText です。

  15. Label の前景色のテキスト色の役割は QPalette::WindowText です。

  16. TextBrowser で画像を表示するときに、画像を表示するウィンドウを画像のサイズに合わせる必要がある場合は、QTextBrowser の setFixedWidth() 関数と setFixedHeight() 関数を使用してウィンドウ サイズを設定し、パラメータを取得します。写真から。もちろん、この設定のウィンドウの長さと幅にはすでに右側と下のスクロール バーが含まれているため、パラメータを設定する際にはこれら 2 つを考慮する必要があります。

  17. 上のコントロールの背景色を変更せずにウィンドウ全体の背景に色を付けるには、QPalette クラスを使用する必要があります。また、背景色の役割として Window を使用する必要がある場合もあります。Base を背景色の役割として使用すると、QTextEidt クラスとその派生クラスの背景色のみが変更されます。seStyleSheet を使用する場合は、background-上記のコントロールの背景色が完全に変更され、対応するサブウィンドウも変更されました。

  18. Qt では、値 a をテキストに変換するには、tr("%1").arg(a) を使用できます。また、QString::number(a) を使用することもできます。

  19. 実際にこれらのコードを実行すると、最初に表示し、1 秒遅れて 2 番目を表示し、1 秒遅れて 3 番目を表示するのではなく、直接 2 秒遅れて、1 番目、2 番目、3 番目が表示されます。同時に表示される?

  20. その理由は、sleep() などの関数をメイン スレッド GUI で使用すべきではないためです。そうしないと、予期しない結果が表示されます。

  21. 遅延する必要がある場合は、#include <QElapsedTimer> の後に次のコードを使用できます (たとえば、1 秒遅延)。

  22. QtCreator はコンパイルに MinGW を使用するため、Windows で QtCreator をダウンロードしたい場合は、vs の代わりに対応する mingw バージョンをダウンロードする必要があります。そうしないとコンパイルできません。または、Qt ソース ライブラリを自分でダウンロードし、Cmake を使用して MinGW を選択して再コンパイルします。

23. したがって、 Windows 用 Qt ライブラリ 4.8.2 (minGW 4.4、318 MB)   をインストールする場合は、QtCreator を最初にインストールする必要があります。これは、MinGW は QtCreator のインストール中に自動的にインストールされ、Windows 用 Qt ライブラリ 4.8.2 (minGW 4.4、318 MB)がインストールされるためです。 MB )のインストールには MinGW を使用する必要があります。したがって、両者の順序を逆にすることはできません。

  24. ただし、QtCreator2.5.0以降、MinGWはバンドルされなくなり、ユーザーが自分でダウンロードしてインストールする必要があります。Qt 公式 Web サイトに記載されているダウンロード アドレスは、ftp://ftp.qt.nokia.com/misc/MinGW-gcc440_1.zipです。

  25. もちろん、VS コンパイラを使用してコンパイルすることもできるので、Microsoft VS をインストールした後、QtCreator で Microsoft コンパイラのディレクトリを設定し、QtCreator でコードを記述し、コンパイルとデバッグを行います。

  26. Microsoft デバッガーを使用する場合、dbg_x86_6.11.1.404.msi をインストールできます。インストール後、QtCreator は dbg デバッガーを自動的に認識します。

  27. Qtで画像を表示するコントロールはLabelで、後者はTextBrowserを使用しますが、Labelで表示する場合はsetPixmap関数を使用する必要があり、この関数は画像のデータ部分に相当するパラメータを渡します。画像; TextBrowser を使用して表示する場合は、append 関数を直接使用するだけです。この関数は、画像に関連するパラメータを画像のファイル名として (パスを含めて) 渡すことに対応します。

  28. テキストを表示するコントロールは TextBrowser です。

  29. SpinBox の値を取得するには、その value() 関数を呼び出します。

  30. LineEdit の値を取得するには、その text() 関数を呼び出して、対応するデータ型に変換します。

  31. ui の close 関数はウィンドウの表示関数を閉じるだけで、内部の変数は削除されません。

  32. QPaletteはパレットで、そのカラーグループはアクティブグループ、非アクティブグループ、

  33. 使用可能なグループ。アクティブなグループは現在のウィンドウが配置されているグループ、非アクティブなグループは他のウィンドウが配置されているグループ、使用不可のグループは何らかの理由で一時的に使用できないグループです。パレットの色を変更するには、setColor 関数を使用できます。この関数には 2 つのオーバーロード関数が含まれており、パラメータ ColorRole はどのパラメータを変更するかを示します (一般的な背景色など)。

  34. EditLine の背景色の役割は QPalette::Base、前景色のテキストの色の役割は QPalette::Text です。

  35. ボタンの背景色の色の役割は QPalette::Button、前景色のテキストの色の役割は QPalette::ButtonText です。

  36. Label の前景色のテキスト色の役割は QPalette::WindowText です。

  37. 当在TextBrowser中进行图片显示时,如果需要让显示图片的窗口自适应图片的大小,可采用QTextBrowser下的setFixedWidth()和setFixedHeight()函数来设置窗口尺寸,其参数是从图片中获取。当然这个设置的窗口长和宽已经包括了右边和下边的滚动条,所以给参数的时候需要把这2者考虑进去。

  38. 要对整个窗口的背景该色,且不改变其上面控件的背景色,则这时需用QPalette类。且时需用Window作为背景色角色;如果用Base作为背景色角色的话,那么它只会改变QTextEidt类及其派生类的背景色;如果用seStyleSheet,其用background-color的话,那么它会把其上面的控件背景色全改了,且相应的子窗口的也都改了。

  39. 在Qt中,将1个数值a转换成文本,可采用,tr(“%1”).arg(a).也可采用QString::number(a).

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

  41. 其中第一个参数为时隔多长(单位为ms)执行后面的event信号函数,当然该函数的函数名可以自己定义。这句代码的意思是立即执行执行event()函数。和sleep()函数一样,在Qt中也不能用opencv中的waitKey()函数来进行延时。

  42. 用QT Creater编程,如果没有自动补全是很痛苦的事情,于是便查阅了QT的文档,发现CTRL+SPACE是自动补全的快捷键;
但是在 Creater里使用居然没有效果,估计是输入法切换的冲突(CTRL+SPACE是我中英文输入的默认快捷键)
于是寻求解决方法,在QT Creater->Tools->Options... 里找到environment->Keyboard,发现TextEditor.CompleteThis命令,其快捷键是Ctrl+Space;将其result掉,然后输入Alt+/(Eclipse里习惯的~~)后应用退出即可.

  43. 要达到像vs一样在终端(单独的终端)输出想调试的各种信息,不是采用cout,而是采用qDebug()<<”xxx”;

  44. 如果菜单下的action不能够运动到toolbar上,则在toolbar上右击,选择separate toolbar,然后移动即可。

45. setCentralWidget()函数是把控件布满整个界面的语句。

  46. 在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了。

  47. Qt中的label控件对应android中的是TextView控件。

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

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

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

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

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

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

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

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

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

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

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

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

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

  59. 用滑动条触发进度条的实验中,至少有下面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());

  }

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

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

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

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

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

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

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

  66. 用QT Creater编程,如果没有自动补全是很痛苦的事情,于是便查阅了QT的文档,发现CTRL+SPACE是自动补全的快捷键;
但是在 Creater里使用居然没有效果,估计是输入法切换的冲突(CTRL+SPACE是我中英文输入的默认快捷键)
于是寻求解决方法,在QT Creater->Tools->Options... 里找到environment->Keyboard,发现TextEditor.CompleteThis命令,其快捷键是Ctrl+Space;将其result掉,然后输入Alt+/(Eclipse里习惯的~~)后应用退出即可.

  67. 要达到像vs一样在终端(单独的终端)输出想调试的各种信息,不是采用cout,而是采用qDebug()<<”xxx”;

  68. 如果菜单下的action不能够运动到toolbar上,则在toolbar上右击,选择separate toolbar,然后移动即可。

  69. setCentralWidget()函数是把控件布满整个界面的语句。

  70. 在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了。

  Qt中的label控件对应android中的是TextView控件。

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

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

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

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

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

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

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

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

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

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

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

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

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

  82. 用滑动条触发进度条的实验中,至少有下面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());

     }

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

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

  85. Windows+Qt Creator+Opencv的使用:

    需要在Qt工程中,即***.pro文件中加入:       

    INCLUDEPATH+=C:\Qt\opencv2.4.2\build\include\
    C:\Qt\opencv2.4.2\build\include\opencv\
    C:\Qt\opencv2.4.2\build\include\opencv2
 
 
    LIBS+=C:\Qt\opencv2.4.2\build\x86\vc10\lib\opencv_core242d.lib\
    C:\Qt\opencv2.4.2\build\x86\vc10\lib\opencv_highgui242d.lib\
    C:\Qt\opencv2.4.2\build\x86\vc10\lib\opencv_imgproc242d.lib
    特别要注意的地方是INCLUDEPATH后面添加的是C:\Qt\opencv2.4.2\build\include\等,而不是C:\Qt\opencv2.4.2\include\等,否则一直报错。
    另外还有一点是Qt中的目录不能包含空格,所以安装的opencv目录前如果有Program Files是不行的,为此我还专门把opencv移到了另一个目录,2个opencv同时用。
  86. QTextBrowser中append方法是在当前框下一行加入内容,可以是文字或图片等。它本身已经固定了换行模式,取消不了。

     setText方法是在框在加入内容,也可以是文字或图片等,但是它会把前面所有的内容都覆盖掉。

     insertHtml和append一样,可以加入文本或图片等,它不会覆盖掉其内容,但是默认的也是从下一行开始的,即有换行模式,不过该自动换行模式可以被取消。采用下面的语句:

     ui->textBrowser->setWordWrapMode (QTextOption::NoWrap);

     同理,如果要恢复自动换行模式,采用:

     ui->textBrowser->setWordWrapMode (QTextOption::WordWrap);

  87.  解决新版Qt中不能使用opengl中的gluXXX()函数方法:        

           1. 先下载glut库http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

           2.将下载下来的文件解压,将glut32.lib和glut.lib两个lib文件移到qt目录下的./lib文件夹中。

           3.将glut.dll和glut32.dll两个动态链接库移到C:\windows\system32中。

           4.将glut.h文件移到qt目录下的\include\QtOpenGL中

     5.新建一个txt文件,里面输入代码:#include “glut.h”,然后把该txt文件的名字重命名为glut,注意这个地方不需要加后缀

        6. 切换到在自己的程序中,在myGLWidget.cpp(QGLWidget派生类的cpp)加入"#include<glut>" 就OK了。即使我们也在GLWidget.cpp中也加入了头文#include<QtOpenGL>,

              上面的"#include<glut>" 同样需要。   

  88.  在Qt中使用定时器的方法:

     法一:只需启动定时器,例如startTimer(5);这里是设置5ms定时,然后复写timerEvent(QTimerEvent*)函数即可。

     法二:用如下代码进行设置

    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(timerEvent()));
    timer->start(5);
    然后重写timerEvent()槽函数即可。
 89. 当使用tr进行语言国际化时,有可能会出现错误:error : 'tr' was not declared in this scope。解决方法:在程序中加入#include<QObject>,并使用QObject::tr();
 90. Qt中如果需要更改工程名的话(这里指用QtCreator建立的工程),则需删除一些QtCreator生成的与旧工程名相关的文件,一般删除如下文件:Makefile、Makefile.Debug、Makefile.Release、*.pro.user,以及目录release、debug。然后更改*.pro文件的名字,重新打开工程编译即可。
 91. QFileInfo类是用来提供与系统无关的文件信息的。canonicalFilePath指的是解释过的绝对路径,比如"..","."分别解释为上一级目录和本目录。
 92. qobject_cast<A>(B),当类型B和A相同或者类型B是A的子类类型,则返回类型A。否则返回0;其实就是说如果B可以转换成A的话(2种类型有相似性),则进行强制类型转换,否则转换失败。
  93. QSetting类提供了平台无关的永久保存应用程序设置的方法,这些设置包括窗口的位置,大小等信息。

  94. QRectF为一个float精度的矩形框。

  95. QPainter为一个绘图装置,我们可以在上面进行绘图,绘图的对象为widget或者printer。

  96. 画笔是用来绘制线型的,主要样式有3个方面:笔帽,结合点和线型。

  97. 画刷是用来画填充封闭的几何图形的,主要有2个参数设置:颜色和样式。

  98. 如果编译时出现Qt自带的源代码处的错误提示,比如说:qtextoption.h语法错误: 缺少“;”(在标识符“QtGuiModule”的前面)

  99. 定位到错误的地方时,是Qt系统的源码,按照道理系统源码时不会出错的,这时有能是自己写的一个类继承了系统提供的类,而这个类在头文件的括号中没有使用分号所致.

  100. 在Qt中使用定时器功能有2中方法,第一个是使用QTimer类。第二个是使用QObject子类的重载函数timerEvent()。在使用第1种方法时需要将设置定时器的信号与槽连接,然后使用start函数来启动该定时器,使用stop方法来停止定时器。在使用第2种方法时,只需要调用系统的startTimer()函数就可以了。

  101. QTimer::singleShot()方法可以完成在时间间隔完成后执行后面的槽函数,相当于个直接的延时函数,使用起来应该还是蛮方便的。

  102. 颜色的第4个通道值可以理解为不透明度,即如果为255的话,就指的是完全不透明。

  103. QString::number(num)可以将整型的num转换成string型。

  104. qreal 其实就是double型。

  105. 往QListWidget加入文字可以使用其addItem()方法.

  106. arg()中的参数是QString型,则其对应的百分号需要用单引号括起来。

  107. Qt::DecorationRole是Qt::ItemDataRole中的一种, Qt::ItemDataRole表示每一个model中的Item都有自己的一个数据集,且有自己的特色。这些特点用来指定模型中的哪一种数据类型将被使用。而Qt::DecorationRole指的是说数据将以图表的形式来呈现。

  108. QAbstractItemView为一个抽象item视图类,里面有很多方法可以重写。

  109. QPaint是一个绘图类,可以设置画笔,画刷,字体。

  110. 在设计用户名密码登陆时,如果用户名和密码都正确,则会调用调用父类的QDialog::accept()槽函数,该函数实现关闭当前对话框,设置对话框的运行结果为QDialog::Accepted,并发送QDialog::finished(int result)信号。

  111. 增加StackWidget页面的方法,在StackWidget上鼠标右击,选择insert page,然后继续选择在本页之前或者之后加入页码。

  112. QAction对象使用setText()方法时,如果在对象的构造函数中已经有了其文字显示,那么action上面显示的就是构造函数中的text文本。这里的setText文本有2个作用,第一个是如果该action对应到了菜单栏中,则菜单栏会自动将其显示出来;第二个时如果构造函数中没有设置文本内容,则该action会显示setText()方法设置的内容,当然了,如果action设置了图标,该文本内容就被覆盖了,退化为文本提示了。

  113. cellClicked(int, int)信号是当表格中的一个cell单元被单击时发出的。它的两个参数分别为表格中cell的行号和列号。

  114. 可以使用frameGeometry()来获得程序中的主界面,然后该界面的定位函数可以获得与主界面的相对位置,比如说frameGeometry().bottomLeft()就是获得主界面的左下方的位置。

  115. 当自己定义了的一个类,该类有对应的头文件和源文件。如果在第二个类的头文件中药使用到第一个类,则可以不用包含第一个类的头文件,直接用class关键字声明就可以了,在第二个类的源文件中则需要包含第一个类的头文件,因为这里需要使用第一个类对象的成员方法。

  116. Qt中正则表达式为类QRegExp,正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。比如说程序中的QRegExp rx("\\[\\d{2}:\\d{2}\\.\\d{2}\\]");其实就是表示歌词文件前面的格式,比如[00:05.54]。表达式中的d{2}表示匹配2个数字。

 117. Qt中常见的类的继承总结:

  如果需要设计界面,且需要菜单栏,工具栏,状态栏等,一般继承QMainWidget类。

  如果需要界面,不需要菜单栏,工具栏,状态栏等,一般继承QDialog类。

  如果需要使用自定义视图来画图形,则可以继承QAbstractItem类。

  如果需要自己设计场景,比如游戏开发的时候,可以继承QGraphicsView类。

  如果需要自己制作一个小图形视图,可以考虑继承QGraphicsObject类,当将这些小视图构成一个视图组时,该组的类可以继承QGraphicsItemGroup类和QObject类。

  一般的界面设计也可以继承QWidget类。

  一般的文本类可以继承QLabel,比如在设计音乐播放器时的显示桌面歌词的类。

118. 在QtCreator的使用中,有时候会出现两个尖括号在一起的情况,这时候没有语法错误,但是QtCreator这个编辑环境会在你的代码下出现个红色的波纹,让人看起来非常不舒服。例如:

 

   解决方法非常简单,即把两个尖括号中间不要紧挨着,用一个空格号隔开一下即可,这时候红色的波纹警告线就消失了。


おすすめ

転載: blog.csdn.net/laiyinping/article/details/51354400