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。
注:在插入的时候不用插入该字段。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值