qt一些應用函數

轉載自http://blog.csdn.net/binghehjbenben/article/details/7693714

在sql語句中使用變量
通過使用變量綁定的方式解決。如下代碼所示:
    query.prepare("insert into stu(id, name) values(:id, :name)");
    query.bindValue(":id", 7, QSql::In);
    query.bindValue(":name", s2, QSql::In);


在tableView中顯示數據庫中的數據

    QSqlTableModel *model = new QSqlTableModel;   
    model->setTable("tablename");
    model->select();
    
    tableView->setModel(model);
    如果不需要某些項目的話,使用model->removeColumn(需要刪除的列的編號);(列的編號是以model->select()後出現的項目順序進行排序,從0開始);

使用QButtonGroup 

QButtonGroup *buGroup = new QButtonGroup(this);//按鈕組
 buGroup->addButton(ui->One_2,1);//添加按鈕到QButtonGroup
        buGroup->addButton(ui->Two_2, 2);
        buGroup->addButton(ui->Three_2, 3);
         Object::connect(buGroup, SIGNAL(buttonClicked(int)),this, SLOT(buttonNumslot(int)));
  槽函數buttonNumslot(int num)的實現、:
            ui->lineEdit->insert(QString::number(num));


unsigned char *轉換爲QString  (靈活使用強制類型轉換)
現將unsigned char *轉換爲char *,然後在強制轉換爲QString,參考代碼如下:
unsigned char a[] = "123";
QString string((char *)a);

TableWidget顯示的項目平均分配列所佔用的長度
QTableWidget *table = new QTableWidget();
    table->setColumnCount(3);
    table->setRowCount(5);
    table->horizontalHeader()->setStretchLastSection(true); //就是這個地方
    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    table->show();
    此種方式只能平均分配當前table的大小,但是不能隨着table中數據的大小而改變,如果需要的話,應該使用:
        tableView->resizeColumnsToContents();//按照內容設置列的寬度

改變tableWidget中分頁的名稱
使用tabWidget中的setTabText成員函數,函數原型爲:void QTabWidget::setTabText ( int index, const QString & label )
參考代碼如下:tabWidget->setTabText(0, "button");

在Qt中使用全局變量,即在各個界面中都能使用
解決方式:使用extern變量類型修飾符
在一個.h的頭文件中聲明需要全局使用的變量,在變量前面要加上extern修飾符此謂之聲明,然後在.cpp文件中給這些變量賦值。此謂之定義。在其他文件中只需要在所有函數外邊使用:變量類型 變量名 ,然後就可使用,在第二次使用時要在前面加上extern。不然編譯器會報錯:重複定義某個變量
此問題主要是extern的使用方法:先在一個文件中聲明(即extern 變量類型 變量名,但不分配內存),然後再定義方可使用(定義方式:變量類型 變量名)。
注:(1)、儘量不要去修改全局變量的值,只是去使用。即將全局變量當作只讀變量。防止出現不必要的麻煩。   
   (2)、調用全局變量的源文件可以不用包含全局變量所在的頭文件,但最好是加上,因爲幾個文件間的相互包含makefile都給解決了。
   (3)、這種方法有弊端,主要是如果在系統庫函數中有和定義的全局變量同名的變量,將會造成衝突。並且其結構不符合面向對象的思想,


取出tableView中特定行的值
首先創建槽關聯信號clicked ( const QModelIndex & )的槽,在槽函數中使用如下代碼:
    int row = index.row();(index是QModelIndex *index,在槽函數聲明的時候中自動添加的)
    qDebug() << QString::number(row, 10);  //測試選中第幾行
    QSqlRecord record = model->record(row); //聲明一個QSqlRecord對象,存儲查詢結果
    QString title = record.value("Data").toString(); //將選取的值存儲在變量中
    qDebug() << title;

關於事件重構
首先在頭文件中重新定義需要重構的事件,但一定要定義爲protect類型,(保持原有類型不變),如
    protect :
        void showEvent(QShowEvent *e);
        bool event(Qevent *e);
    然後在源文件中重新實現該事件即可。  

QString類中的一些函數介紹,replace()、remove()
replace()函數的作用是使用一個字符串來代替另一個字符串中的某一部分。如:
    QString str = "a cloudy day";
    str.replace(2, 6, "sunny");  //結果爲a sunny day
    重載的replace()函數讓第二個參數代替所有出現第一個參數的地方。如:
    str.replace("a", "aaaaaaaa");//用“aaaaaaaa”替換所有出現“a”的地方。
    remove()函數的作用是刪除一個字符串中的某些部分。如:
    QString str = "a cloudy day";
    str.remove(2, 6);  //結果爲a day
    從const char *轉換爲QString的方式爲:QString str += "(const char *)";或是使用加上QString的強制轉換,或者調用fromAscii()或fromLatin1()。

數據庫的錯誤類型
數據庫的錯誤類型主要包含在QSqlError類。使用此類的各個模式中的lastError()成員函數就可以獲得錯誤類型。常見的錯誤類型使用QSqlErrorErrorType枚舉類型:
具體內容如下所示:

Constant                     Value                    Description
QSqlError::NoError               0                No error occurred.(正常,沒有錯誤發生)
QSqlError::ConnectionError       1                Connection error.(連接錯誤)
QSqlError::StatementError       2                SQL statement syntax error.(sql語句語法錯誤)
QSqlError::TransactionError       3                Transaction failed error.(轉換錯誤)
QSqlError::UnknownError         4                Unknown error.(未知錯誤)

清空QTableView中的內容
重新定義一個model(TableModel、QSqlQueryModel等任何模型均可),然後使用TableView中的setModel成員函數重新加載即可

設置SQLite表中的某一個字段爲自增字段
從 SQLite 的 2.3.4 版本開始,如果你將一個表中的一個字段聲明爲 INTEGER PRIMARY KEY,
那麼無論你何時向該表的該字段插入一個 NULL 值,這個 NULL 值將自動被更換爲比表中該字段所有行的最大值大 1 的整數;如果表爲空,那麼將被更換爲 1。
注:在插入的時候不用插入該字段。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章