菜鸟玩qt(4)---qt常识

1.程序可以显示中文
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
2.连接数据库//http://www.im80hou.com/html/mysql/2009/1003/1538.html
.pro中添加:QT += sql
#include "QtSql/qsqldatabase.h"
#include <qsqlquery.h>
#define   DB_SALES_DRIVER     "QPSQL7"
#define   DB_SALES_DBNAME   "db"
#define   DB_SALES_USER   "user"
#define   DB_SALES_PASSWD   "pwd"
#define   DB_SALES_HOST ""
QSqlDatabase db = QSqlDatabase::addDatabase ( DB_SALES_DRIVER);
    db.setDatabaseName( DB_SALES_DBNAME );
    db.setUserName( DB_SALES_USER );
    db.setPassword( DB_SALES_PASSWD );
    db.setHostName( DB_SALES_HOST );
    if ( db.open() ) {
    // 数据库被成功打开,我们现在可以运行SQL命令
        cout<<"连接数据库成功"<<endl;
    }
    else cout<<"连接数据库失败"<<endl;
   
sql语句:
QSqlQuery query;
query.exec("select short_name from merchants_def");
while(query.next())
{
 QString name = query.value(1).toString();
 printf ("name = %s\n", name.toUtf8().data());//toUtf8(), toAscii(), fromUtf8()
 num++;
}
//动态
int a1234=10;
        query.prepare("select * from merchants_def where merchant_no=:a1234");
        query.bindValue(":a1234", a1234);
        query.exec();
        while(query.next()){
            int x=query.value(0).toInt();
            cout<<"x="<<x<<endl;
        }
3.treewidget
     QTreeWidgetItem *issuer1 = new QTreeWidgetItem(m_ui->treeWidget);
     issuer1->setText(0, tr("发卡方1"));
    
     QTreeWidgetItem *merchant1 = new QTreeWidgetItem(issuer1);
     merchant1->setText(0, tr("商户1"));
     merchant1->setText(1, tr("Yes"));
     QTreeWidgetItem *outlet1 = new QTreeWidgetItem(merchant1);
     outlet1->setText(0, tr("网点1"));
     outlet1->setText(1, tr("Yes"));
     QTreeWidgetItem *outlet2 = new QTreeWidgetItem(merchant1);
     outlet2->setText(0, tr("网点2"));
     outlet2->setText(1, tr("Yes"));
     QTreeWidgetItem *merchant2 = new QTreeWidgetItem(issuer1);
     merchant2->setText(0, tr("商户2"));
     merchant2->setText(1, tr("Yes"));
    
4.tablewidget(每次修改后重新显示表)
#include <qtabwidget.h>
显示table:
    m_ui->tableWidget_2->setRowCount(2);
    m_ui->tableWidget_2->setItem(0,1,new QTableWidgetItem(tr("123")));
    m_ui->tableWidget_2->setItem(1,1,new QTableWidgetItem(tr("12")));
取某值:
g_select_key[j]=atoi(m_ui->tableWidget->item(temp[j],0)->text().toAscii().data());
选中行:
     QItemSelectionModel *m = m_ui->tableWidget_2->selectionModel();
     QModelIndexList indexes = m->selectedIndexes();
     QModelIndex index;
     int temp[11]={0};
     int which_row[11]={0};
     int i=0;
     int count_no = 10;
     foreach(index,indexes){
        temp[i++]= index.row();
     }
     if(i==0)
        QMessageBox::warning(this,tr("警告"),tr("请先选中一行"));
     else
         if(i==1)
         {
          which_row[0]=temp[0];
          if(which_row[0]>=count_no)
              QMessageBox::warning(this,tr("警告"),tr("选择有误"));
          else
          {
        cout<<"修改。。。"<<endl;
        cout<<"which_row[0]="<<which_row[0]<<endl;//修改之后更新表
          m_ui->tableWidget_2->setRowCount(3);
    m_ui->tableWidget_2->setItem(0,1,new QTableWidgetItem(tr("123")));
    m_ui->tableWidget_2->setItem(1,1,new QTableWidgetItem(tr("12")));
      m_ui->tableWidget_2->setItem(2,1,new QTableWidgetItem(tr("12")));
    }
     }
     else
         if(i>1)
         {
                int j;
                 for(j=1;j<i;j++)
                 {
                     if(temp[j]==temp[0])
                     break;
                 }
     if(j==1)
     {
        which_row[0]=temp[0];
        if(which_row[0]>=count_no)
              QMessageBox::warning(this,tr("警告"),tr("选择有误"));
          else
        {
          cout<<"修改。。。"<<endl;
          cout<<"which_row[0]="<<which_row[0]<<endl;//修改之后更新表
           m_ui->tableWidget_2->setRowCount(3);
          m_ui->tableWidget_2->setItem(0,1,new QTableWidgetItem(tr("123")));
            m_ui->tableWidget_2->setItem(1,1,new QTableWidgetItem(tr("12")));
           m_ui->tableWidget_2->setItem(2,1,new QTableWidgetItem(tr("12")));
    }
     }
     else
          QMessageBox::warning(this,tr("警告"),tr("一次只能修改一行"));
     }
 
     else
         return;
        
5.comboBox
#include <qcombobox.h>
 for( i=0; i<num; i++)
         ui->merchant_comboBox->addItem(QString::fromUtf8(short_name[i]));
        
merchant_name=ui->merchant_comboBox->currentText();//comboBox
start_date=ui->start_dateEdit->text();//dateEdit
end_date=ui->end_dateEdit->text();
report_type=ui->type_comboBox->currentText();
s=ui->merchants_comboBox->itemText(i);//
6.登录框( http://hi.baidu.com/yafeilinux/blog/item/a335cd10a465d174cb80c42d.html)
    QApplication a(argc, argv);
    Widget w;
    loginDlg login;
   
    if(login.exec()==QDialog::Accepted)
    {
        w.show();
        return a.exec();
    }
    else return 0;
   
//
if(m_ui->usrlineEdit->text()==tr("hqq")&&m_ui->pwdlineEdit->text()==tr("hqq"))
//判断用户名和密码是否正确
    accept();
else{
    QMessageBox::warning(this,tr("Warning"),tr("user name or password error!"),QMessageBox::Yes);
//如果不正确,弹出警告对话框
    m_ui->usrlineEdit->clear();//清空用户名输入框
    m_ui->pwdlineEdit->clear();//清空密码输入框
    m_ui->usrlineEdit->setFocus();//将光标转到用户名输入框
    }
   
7.横向滚动条和spinBox关联使用
    ui->spinBox->setRange(0, 130);//设置各自的取值范围
    ui->horizontalSlider->setRange(0, 130);
    //滑块和Spin组件的值的变化都会对应的改变
    QObject::connect(ui->spinBox, SIGNAL(valueChanged(int)),
                                     ui->horizontalSlider, SLOT(setValue(int)));
    QObject::connect(ui->horizontalSlider, SIGNAL(valueChanged(int)),
                                     ui->spinBox, SLOT(setValue(int)));
    ui->spinBox->setValue(35);//注意这里的设置也会影响slider
8.progressbar的使用(点击按钮触发progressbar,而不是触发整个界面)
 for (i=1;i<=100;i++)
    {
        m_ui->progressbar->setValue(i);
        for ( j=0; j<1000*1000*4;j++)
        {
        }
    }
9.mdi:在Qt中要制作MDI介面的视窗,是使用QMainWindow ,并将其中心元件(Central Widget)设为QMdiArea实例,而每一个MDI子视窗,则使用QMdiArea的addSubWindow()来加入。
#include <QtGui>
在on_actionNew_N_triggered()中:
     QMdiArea *mdiArea = new QMdiArea;
     this->setCentralWidget(mdiArea);
     QTextEdit *textEdit = new QTextEdit;
     textEdit->setWindowTitle("File1");
     mdiArea->addSubWindow(textEdit);
    
10.connect(sender, signal, receiver, member)
sender是发生器,signal是发出的信号,receiver是接收器,member是槽。
如:connect(hostLineEdit, SIGNAL(textChanged(const QString &)),
            this, SLOT(enableGetFortuneButton()));
           
11.设置可编辑状态
for(j=0;j<count;j++)
        m_ui->tableWidget->item(i,19)->setFlags(Qt::ItemIsEditable);
       
12.QMessageBox
if(QMessageBox::information(this,tr("警告"),tr("确定删除?"),QMessageBox::No,QMessageBox::Yes)==16384)
13.QFile
 QFile file("/home/hqq/1.txt");
     char *msg="1234";
 file.open( QIODevice::WriteOnly);
      file.write(msg, qstrlen(msg));
      file.close();
14.execl
QString fileName=QFileDialog::getSaveFileName(this,tr("Save File"),"",tr("file(*.CSV)"));
    cout<<"fileName="<<fileName.toAscii().data()<<endl;
    if(fileName == "")
        return;
    QTextCodec *code;
    code = QTextCodec::codecForName("gb18030");
    std::string strbuffer = code->fromUnicode(fileName).data();
    FILE *fileWrite = fopen( strbuffer.c_str(),"w+");
    QString strFemale = "Female ";
    QString strMale = "Male ";
    QString strPatientCount = "Patient ";
    char a[20]="abc";
    char b[20]="一二三";
    QString str ="\n";
    //std::string strCountbuffer = code->fromUnicode(strFemale+","+strMale+","+strPatientCount+str+QString().setNum(femaleCount)+","+QString().setNum(maleCount)+","+QString().setNum(patientCount)).data();
    //std::string strCountbuffer=code->fromUnicode(strFemale+","+strMale+","+strPatientCount+str+QString().setNum(1)+","+QString().setNum(1)+","+QString().setNum(1)).data();
    //std::string strCountbuffer=code->fromUnicode(strFemale+strMale+strPatientCount+str+QString().setNum(1)).data();//可用
    std::string strCountbuffer=code->fromUnicode(strFemale+strMale+strPatientCount+str+a+' '+tr(b)).data();
    QFile file;
    file.open(fileWrite, QIODevice::WriteOnly);
    file.write(strCountbuffer.c_str(), qstrlen(strCountbuffer.c_str()));
    file.close();
15.打印
#include <QPrinter>
#include <QPainter>
#include <QFileDialog>
#include <QPrintDialog>
#include <QTextDocument>
    QTextDocument *document = ui->textEdit->document();
    QPrinter printer;
    QPrintDialog dlg(&printer, this);
    dlg.setWindowTitle(tr("打印文档"));
    if (dlg.exec() != QDialog::Accepted)
     return;
    document->print(&printer);

你可能感兴趣的:(职场,qt,休闲)