1. 程式人生 > >Qt學習筆記(QAction,QString格式化輸出)

Qt學習筆記(QAction,QString格式化輸出)

在編寫介面程式時經常會用到單選項或者複選項,介面按鈕方式可以採用QCheckBox、QRadioButton配合QGroupBox實現。如果採用Qt設計師設計介面時,很容易達到這樣的效果。而另一種情況是採用選單項實現,而選單欄實現單選或者多選一般採用QAction實現。

使用QAction實現單選的方法:將多個QAction新增到QActionGroup,並將QActionGroup設定為exclusive即可,及setExclusive(true);

示例(action已經在設計師介面上定義):

/*動靜態切分演算法action的互斥選擇設定*/
QActionGroup*algrithmAction=new
QActionGroup(this);
algrithmAction->addAction(ui->frameDifAlgAction);
algrithmAction->addAction(ui->multiThrhldFramedifAction);
algrithmAction->addAction(ui->vibeAlgAction);
algrithmAction->setExclusive(true);

QString是在編寫Qt程式時經常用到的資料結構,同時我們經常需要將各種型別的資料轉化成QString然後輸出到介面上。這是實現QString的格式化(如printf)就很有必要。

1.QString 轉換成其他格式

QString轉string:使用QString::toStdString()即可實現。

QString轉數字:使用QString::toInt()/toDouble()/toFloat()/等等

QString轉字串:這個需要稍微麻煩一些

Qstring  str;

char*  ch;

QByteArray ba = str.toLatin1();    

ch=ba.data();

注意:不可以str.toLatin1().data()這樣一步完成,可能出錯,在需要多個字串轉化時就會出錯,如果整個程式只有一次這樣的轉化可以嘗試,安全起見,分步完成。

2.arg的使用

QString::arg ( int a, int fieldWidth = 0, int base = 10, const QChar & fillChar = QLatin1Char( ' ' ) ) const

該方法可以實現一定功能的格式化轉換,具體實現如下:

     int i = 10;           // current file's number
     int total = 100;       // number of files to process
     QString fileName = "fileNameTest";    // current file's name

     QString status = QString("Processing file %1 of %2: %3") .arg(i).arg(total).arg(fileName);
該方法是通過佔位符的思想實現的,通過arg的引數替換相應位置的變數

3.sprintf

  • QString & QString::sprintf ( const char * cformat, ... )

    這個函式和 C 中的也是差不多的用法,只不過它作為QString的一個成員函式,使用起來就相當方便了,如:

       1: #include <QtCore/QCoreApplication>
       2: #include <iostream>
       3: #include <stdio.h>
       4: using namespace std;
       5: int main()
       6: {
       7:     QString str2;
       8:     str2.sprintf("Ggicci is %d years old, and majors in %s.", 20, "Software Eng");
       9:     cout << str2.toStdString() << endl;
      10:     return 0;
      11: }

輸入結果:

Ggicci is 20 years old, and majors in Software Eng.
Press <RETURN> to close this window...