1. 程式人生 > >QT 總結(一)(1.某位設1或0 2.載入dll、lib庫 3.char * 轉換為 wchar_t * 4.textBrowser 顯示亂碼 追加 5.checkBox的使能)

QT 總結(一)(1.某位設1或0 2.載入dll、lib庫 3.char * 轉換為 wchar_t * 4.textBrowser 顯示亂碼 追加 5.checkBox的使能)

今天寫小程式遇到的問題,做個小總結:

1.如何對某一位置0或者置1?

寫成巨集,方便移植

#define setbit(x,y) x|=(1<<y) //將X的第Y位置1
#define clrbit(x,y) x&=~(1<<y) //將X的第Y位清0


2.是關於如何載入dll或lib庫的。可以看這篇bog   Qt呼叫dll中的功能函式點選開啟連結

****************************************************************************************************************************************************

宣告: 事先我已經自己動手寫了一個簡單的dll檔案(myDLL.dll),C版介面的。並且用我前兩篇有關DLL文章裡面的方法,從dll中匯出了匯入庫(.lib)檔案,dll中有兩個函式,原型如下:

   void HelloWorld();     //函式內部呼叫Win32 API,功能是彈出一個helloworld提示框   int add(int a,int b);  //實現兩個數相加,並返回結果

 下面分別通過顯示呼叫和隱式呼叫兩種方法,來模擬Qt如何呼叫外部dll檔案中的功能函式,follow me....

預備知識:

     1、如果在沒有匯入庫檔案(.lib),而只有標頭檔案(.h)與動態連結庫(.dll)時,我們才需要顯示呼叫,如果這三個檔案都全的話,我們就可以使用簡單方便的隱式呼叫。

     2、通常Windows下程式顯示呼叫dll的步驟分為三步(三個函式):LoadLibrary()、GetProcAdress()、FreeLibrary()

 其中,LoadLibrary() 函式用來載入指定的dll檔案,載入到呼叫程式的記憶體中(DLL沒有自己的記憶體!)

         GetProcAddress() 函式檢索指定的動態連結庫(DLL)中的輸出庫函式地址,以備呼叫

         FreeLibrary() 釋放dll所佔空間 

1、顯示呼叫 

      Qt提供了一個 QLibrary 類供顯示呼叫。下面給出一個完整的例子:

#include <QApplication>
#include <QLibrary>
#include <QDebug>
#include <QMessageBox>
#include "dll.h"             //引入標頭檔案
typedef int (*Fun)(int,int); //定義函式指標,以備呼叫
int main(int argc,char **argv)
{
    QApplication app(argc,argv);
    QLibrary mylib("myDLL.dll");   //宣告所用到的dll檔案
    int result;
    if (mylib.load())              //判斷是否正確載入
    {
        QMessageBox::information(NULL,"OK","DLL load is OK!");
        Fun open=(Fun)mylib.resolve("add");    //援引 add() 函式
        if (open)                  //是否成功連線上 add() 函式
        {
            QMessageBox::information(NULL,"OK","Link to Function is OK!");
            result=open(5,6);      //這裡函式指標呼叫dll中的 add() 函式
            qDebug()<<result;
        }
        else
            QMessageBox::information(NULL,"NO","Linke to Function is not OK!!!!");
    }
    else
        QMessageBox::information(NULL,"NO","DLL is not loaded!");
        return 0;  //載入失敗則退出28}


 myDLL.dll為自定義的dll檔案,將其複製到程式的輸出目錄下就可以呼叫。顯然,顯示呼叫程式碼書寫量巨大,實在不方便。

2、隱式呼叫

    這個時候我們需要三個檔案,標頭檔案(.h)、匯入庫檔案(.lib)、動態連結庫(.dll),具體步驟如下:

1、首先我們把 .h 與 .lib/.a 檔案複製到程式當前目錄下,然後再把dll檔案複製到程式的輸出目錄,

2、下面我們在pro檔案中,新增 .lib 檔案的位置: LIBS+= -L D:/hitempt/api/ -l myDLL

         -L 引數指定 .lib/.a 檔案的位置

         -l  引數指定匯入庫檔名(不要加副檔名) 

         另外,匯入庫檔案的路徑中,反斜槓用的是向右傾斜的 

3、在程式中include標頭檔案(我試驗用的dll是用C寫的,因此要用 extern "C" { #include "dll.h" } )

 下面是隱式呼叫的例項程式碼:

#include <QApplication>
#include <QDebug>
extern "C"    //由於是C版的dll檔案,在C++中引入其標頭檔案要加extern "C" {},注意
{
        #include "dll.h"
}
int main(int argv ,char **argv)
{
       QApplication app(argv,argv);
       HelloWordl();          //呼叫Win32 API 彈出helloworld對話方塊
       qDebug()<<add(5,6);    // dll 中我自己寫的一個加法函式
       return 0;  //完成使命後,直接退出,不讓它進入事件迴圈
}


************************************************************************************************************************************

本來是打算用隱身呼叫的,但是可能是庫的原因,造成無法使用。庫是別的公司提供的。so,用的第一種。在後面會貼一些我的code。

jida.h 部分 函式形成如下

BOOL WINAPI JidaDllInstall(BOOL install);
BOOL WINAPI JidaDllInitialize(void);
BOOL WINAPI JidaDllUninitialize(void);

DWORD WINAPI JidaBoardCountW(LPCWSTR pszClass, DWORD dwFlags);
BOOL WINAPI JidaBoardOpenW(LPCWSTR pszClass, DWORD dwNum, DWORD dwFlags,/*@[email protected]*/PHJIDA phJida);
BOOL WINAPI JidaBoardClose(HJIDA hJida);

DWORD WINAPI JidaI2CCount(HJIDA hJida);
DWORD WINAPI JidaI2CType(HJIDA hJida, DWORD dwType);
BOOL WINAPI JidaI2CRead(HJIDA hJida, DWORD dwType, BYTE bAddr, LPBYTE pBytes,DWORD dwLen);
BOOL WINAPI JidaI2CWrite(HJIDA hJida, DWORD dwType, BYTE bAddr, LPBYTE pBytes,DWORD dwLen);

在要載入的cpp檔案上寫上QT,因為dll是window的,裡面含有定義的巨集DWORD這類,so加上windows.h

#include <windows.h>
#include <QLibrary>
#include "jida.h"

定義指標函式以備呼叫如:一個add函式。下面第一行為函式,第二行為函式指標。
    //int add(int a,int b);
    //typedef int (*Fun)(int,int); //定義函式指標,以備呼叫

下面是我的main.cpp裡面的。第一行pHandle是給dll的函式裡面的api介面,不同dll介面不同,請忽略,不用在意。

主要是dll的載入。QLibrary jida_lib("jida.dll");

然後引用dll裡面的函式。resolve是載入dll裡面的函式。括號裡面的(JidaDallInstall)是Dell裡面的函式名。然後直接呼叫jida_install即可使用dll裡面的JidaDallInstall函式。jida_install是自己自定義的。

//載入dll 函式
    FunJidaInstal jida_install=(FunJidaInstal)jida_lib.resolve("JidaDllInstall");    //引用dll裡面的JidaDllInstall() 函式

DWORD pHandle = 0; //控制代碼返回值

    //int add(int a,int b);
    //typedef int (*Fun)(int,int); //定義函式指標,以備呼叫

    //dll init uninit
    typedef BOOL WINAPI (*FunJidaInstal)(BOOL install);     //BOOL WINAPI JidaDllInstall(BOOL install);
    typedef BOOL WINAPI (*FunJidaDllInit)(BOOL install);    //BOOL WINAPI JidaDllInitialize(void);
    typedef BOOL WINAPI (*FunJidaDllUninit)(BOOL install);  //BOOL WINAPI JidaDllUninitialize(void);
    //板子
    typedef DWORD WINAPI (*FunJidaBoardCountW)(LPCWSTR,DWORD);             //DWORD WINAPI JidaBoardCountW(LPCWSTR pszClass, DWORD dwFlags); 板子數
    typedef BOOL WINAPI (*FunJidaBoardOpenW)(LPCWSTR,DWORD,DWORD,PHJIDA);//開啟板子 BOOL WINAPI JidaBoardOpenW(LPCWSTR pszClass, DWORD dwNum, DWORD dwFlags,/*@[email protected]*/PHJIDA phJida);
    typedef BOOL WINAPI (*FunJidaBoardClose)(HJIDA hJida);//BOOL WINAPI JidaBoardClose(HJIDA hJida); 板子關閉
    //I2C
    typedef DWORD WINAPI (*FunJidaI2CCount)(HJIDA);              //DWORD WINAPI JidaI2CCount(HJIDA hJida);
    typedef DWORD WINAPI (*FunJidaI2CType)(HJIDA, DWORD ); //DWORD WINAPI JidaI2CType(HJIDA hJida, DWORD dwType);
    typedef BOOL WINAPI (*FunJidaI2CRead)(HJIDA, DWORD , BYTE , LPBYTE ,DWORD );//BOOL WINAPI JidaI2CRead(HJIDA hJida, DWORD dwType, BYTE bAddr, LPBYTE pBytes,DWORD dwLen);
    typedef BOOL WINAPI (*FunJidaI2CWrite)(HJIDA, DWORD , BYTE , LPBYTE ,DWORD );//BOOL WINAPI JidaI2CWrite(HJIDA hJida, DWORD dwType, BYTE bAddr, LPBYTE pBytes,DWORD dwLen);

    //宣告所用到的dll檔案
    QLibrary jida_lib("jida.dll");
    //載入dll 函式
    FunJidaInstal jida_install=(FunJidaInstal)jida_lib.resolve("JidaDllInstall");    //引用dll裡面的JidaDllInstall() 函式
    FunJidaDllInit jida_dll_init = (FunJidaDllInit)jida_lib.resolve("JidaDllInitialize");
    FunJidaDllUninit jida_dll_uninit = (FunJidaDllUninit)jida_lib.resolve("JidaDllUninitialize");
    FunJidaBoardCountW jida_board_countw = (FunJidaBoardCountW)jida_lib.resolve("JidaBoardCountW");
    FunJidaBoardOpenW jida_board_openw = (FunJidaBoardOpenW)jida_lib.resolve("JidaBoardOpenW");
    FunJidaBoardClose jida_board_close = (FunJidaBoardClose)jida_lib.resolve("JidaBoardClose");
    FunJidaI2CCount jida_i2c_count = (FunJidaI2CCount)jida_lib.resolve("JidaI2CCount");
    FunJidaI2CType jida_i2c_type = (FunJidaI2CType)jida_lib.resolve("JidaI2CType");
    FunJidaI2CRead jida_i2c_read = (FunJidaI2CRead)jida_lib.resolve("JidaI2CRead");
    FunJidaI2CWrite jida_i2c_write = (FunJidaI2CWrite)jida_lib.resolve("JidaI2CWrite");


進行下簡單的判斷,dll是否載入成功。.load是載入dll。jida_install是我呼叫dll裡面的dll初始化程式。

等於是呼叫dll裡面的函式,再次看是否載入ok。

    if (jida_lib.load()) //判斷是否正確載入
    {
            cout << "qt lib load ok" << endl;
    }
    else
    {
        cout << "qt lib load error" << endl;
    }

    if(jida_install)
    {
        cout << "dell load ok" <<endl;
    }
    else
    {
        cout << "dell load error" <<endl;
    }


3.QT中char * 轉換為 wchar_t * (LPTSTR)型別 

      醉了,windows下巨集定義了很多char型別 LPTSTR 。今天,直接使用,qt報錯,真TM費事。

      將“CPU”轉化為wcha_t *

    QString str = "CPU";
    const wchar_t * str_cpu = reinterpret_cast<const wchar_t *>(str.utf16());//char * 轉換為 wchar_t * 型別

      下面這篇blog很好

//QString to wchar_t *:
const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(fileName.utf16());

//QString to char * given a file name:
QByteArray fileName = QFile::encodeName(aFileName);
const char * encodedName = fileName.constData(); //Valid as long as fileName exists

//QString to char * (general case):
const char * tmp = str.toUtf8().constData();
[/code]
Windows 資料型別: http://msdn.microsoft.com/en-us/library/aa383751.aspx
[code lang="cpp"]
//TCHAR:
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif

//LPCTSTR:
#ifdef UNICODE
typedef LPCWSTR LPCTSTR;
#else
typedef LPCSTR LPCTSTR;
#endif

//LPCSTR:
typedef const char * LPCSTR;

//LPCWSTR:
typedef const wchar_t * LPCWSTR;

//LPCWSTR to QString:
QString text(QString::fromUtf16(reinterpret_cast<const unsigned short *>(tmp)));
另一種解決辦法是使用QString::fromWCharArray(),但這個函式可能導致一些尚未解決的wchar_t符號問題。

最佳的程式設計風格: 使用L來定義wchar_t寬字串,比如 L"text" 字義了一個UNICODE字串"text"。

今天又看到一個文章,關於字串之間的轉換,比較全面,在此將英文翻譯並整理一下。
原文地址:http://hi.baidu.com/koko200147/blog/item/7e3cad828c9b9bb66d8119cb.html

QString與其他字元型別之間的轉換,QString在Qt4中是UNICODE編碼的,使用utf16規範。

QString::fromAscii ( const char * str, int size = -1 );
QString::fromLatin1 ( const char * str, int size = -1 );
QString::fromLocal8Bit ( const char * str, int size = -1 );
QString::fromRawData ( const QChar * unicode, int size );
QString::fromStdString ( const std::string & str );
QString::fromStdWString ( const std::wstring & str );
QString::fromUcs4 ( const uint * unicode, int size = -1 );
QString::fromUtf8 ( const char * str, int size = -1 );
QString::fromUtf16 ( const ushort * unicode, int size = -1 );
QString::fromWCharArray ( const wchar_t * string, int size = -1 );

//qstring ->std::string
QString::toStdString () ;
QString::toStdWString ();

//BSTR<->QString,不太瞭解BSTR是什麼,還沒用到過,所以不知道對不對
BSTR bstr_str;
QString q_str((QChar*)bstr_str, wcslen(bstr_str));
bstr_str = SysAllocString(q_str.utf16());//remember use SysFreeString on BSTR

//QString<->LPCSTR
QString::toLocal8Bit().constData();
QString::fromLocal8Bit ( const char * str, int size = -1 );

//QString<->LPCWSTR
QString::utf16();
QString::fromUtf16 ( const ushort * unicode, int size = -1 );

//QString<->CString
CString c_str(qstring::utf16());
QString fromUtf16 (LPCTSTR(c_str) );
CString轉換為char*

//1.傳給未分配記憶體的const char* (LPCTSTR)指標.
CString cstr(asdd);
const char* ch = (LPCTSTR)cstr;//ch指向的地址和cstr相同。但由於使用const保證ch不會修改,所以安全.

//2.傳給未分配記憶體的指標.
CString cstr = "ASDDSD";
char *ch = cstr.GetBuffer(cstr1.GetLength() + 1);
cstr.ReleaseBuffer();
//修改ch指向的值等於修改cstr裡面的值.
//PS:用完ch後,不用delete ch,因為這樣會破壞cstr內部空間,容易造成程式崩潰.

//3.第二種用法。把CString 值賦給已分配記憶體的char *。
CString cstr1 = "ASDDSD";
int strLength = cstr1.GetLength() + 1;
char *pValue = new char[strLength];
strncpy(pValue, cstr1, strLength);

//4.第三種用法.把CString 值賦給已分配記憶體char[]陣列.
CString cstr2 = "ASDDSD";
int strLength1 = cstr1.GetLength() + 1;
char chArray[100];
memset(chArray,0, sizeof(bool) * 100); //將陣列的垃圾內容清空.
strncpy(chArray, cstr1, strLength1);

//5.如果上述都不行,使用以下方法
CString origCString("Hello, World!");
wchar_t* wCharString = origCString.GetBuffer(origCString.GetLength()+1);
size_t origsize = wcslen(wCharString) + 1;
size_t convertedChars = 0;
char *CharString;
CharString=new char(origsize);
wcstombs_s(&convertedChars, CharString, origsize, wCharString , _TRUNCATE);
cout << CharString << endl; //成功輸出字串"Hello,World"
從UTF8編碼到GB編碼的字串轉換方法:

QString Utf8_To_GB(QString strText)
{
return QString::fromUtf8(strText.toLocal8Bit().data());
}
從GB編碼到UTF8編碼的字串轉換方法:

QString GB_To_Utf8(char *strText)
{
return QString::fromLocal8Bit(strText);
}
char * 與 const char *的轉換
char *ch1="hello11";
const char *ch2="hello22";
ch2 = ch1;//不報錯,但有警告
ch1 = (char *)ch2;


char 轉換為 QString
其實方法有很多中,我用的是:
char a='b';
QString str;
str=QString(a);


QString 轉換為 char
方法也用很多中
QString str="abc";
char *ch;
ch = str.toLatin1.data();


QByteArray 轉換為 char *
char *ch;//不要定義成ch[n];
QByteArray byte;
ch = byte.data();


char * 轉換為 QByteArray
char *ch;
QByteArray byte;
byte = QByteArray(ch);


QString 轉換為 QByteArray
QByteArray byte;
QString string;
byte = string.toAscii();




QByteArray 轉換為 QString
QByteArray byte;
QString string;
string = QString(byte);
這裡再對這倆中型別的輸出總結一下:
qDebug()<<"print";
qDebug()<<tr("print");
qDebug()<<ch;(ch 為char型別)
qDebug()<<tr(ch);
qDebug()<<byteArray;(byteArray是QByteArray型別)
qDebug()<<tr(byteArray);
qDebug()<<str;(str 為Qstring型別)
但是qDebug()<<tr(str);是不可以的,要想用tr()函式輸出QString型別的字元則要如下:
qDebug()<<tr(str.toLatin1);


int 轉 QString
int a=10;
QString b;
b=QString::number(a)


QString 轉int
QString a="120"
int b;
b=a.toInt()
char * 與 const char *的轉換
char *ch1="hello11";
const char *ch2="hello22";
ch2 = ch1;//不報錯,但有警告
ch1 = (char *)ch2;


char 轉換為 QString
其實方法有很多中,我用的是:
char a='b';
QString str;
str=QString(a);


QString 轉換為 char
方法也用很多中
QString str="abc";
char *ch;
ch = str.toLatin1.data();


QByteArray 轉換為 char *
char *ch;//不要定義成ch[n];
QByteArray byte;
ch = byte.data();


char * 轉換為 QByteArray
char *ch;
QByteArray byte;
byte = QByteArray(ch);


QString 轉換為 QByteArray
QByteArray byte;
QString string;
byte = string.toAscii();




QByteArray 轉換為 QString
QByteArray byte;
QString string;
string = QString(byte);
這裡再對這倆中型別的輸出總結一下:
qDebug()<<"print";
qDebug()<<tr("print");
qDebug()<<ch;(ch 為char型別)
qDebug()<<tr(ch);
qDebug()<<byteArray;(byteArray是QByteArray型別)
qDebug()<<tr(byteArray);
qDebug()<<str;(str 為Qstring型別)
但是qDebug()<<tr(str);是不可以的,要想用tr()函式輸出QString型別的字元則要如下:
qDebug()<<tr(str.toLatin1);


int 轉 QString
int a=10;
QString b;
b=QString::number(a)


QString 轉int
QString a="120"
int b;
b=a.toInt()
另一個


1 QString --> string
QString.toStdString();
2 string --> QString
QString::fromStdString(string)
3 QString --->int,double,char *
QString::toInt()
QString::toDouble()
QString.toStdString().c_str();
4 int double char* --->string
可以採用<sstream>裡的stringstream
以int 為例,int a = 3;
stringstream ss;
string strInt;
ss<<a;
ss>>strInt;

4.顯示在textBrowser->setText 中文亂碼

   轉成QObject::trUtf8即可。

ui->textBrowser->setText((QObject::trUtf8("板子控制代碼 ")) ;

5.QT的textBrowser顯示框,要顯示追加。使用append即可。append()裡面為顯示的字串。
    ui->textBrowser->append((QObject::trUtf8("當前有 ")) + QString::number(i2c) + (QObject::trUtf8(" 條I2C匯流排")));


6.QTcheckBox型別的 使能

ui->checkBox_1->setEnabled(true); 
ui->wifi->setEnabled(false);


相關推薦

QT 總結1.10 2.載入dlllib 3.char * 轉換 wchar_t * 4.textBrowser 顯示亂碼 追加 5.checkBox使

今天寫小程式遇到的問題,做個小總結: 1.如何對某一位置0或者置1? 寫成巨集,方便移植 #define setbit(x,y) x|=(1<<y) //將X的第Y位置1 #define clrbit(x,y) x&=~(1<<y) //將

vs 設定dlllib的輸出路徑c++

 vs2010中,有些專案上的功能是要生產庫檔案給其他專案呼叫的,以下是一些設定庫檔案(x.dll和x.lib)輸出路徑的方法. 設定x.dll 輸出路徑方法是在右鍵專案的"屬性"->聯結器->常規, 然後在常規屬性介面中的 "輸出檔案" 中填入自己想要x.dl

JavaSE基礎(day20)(1)執行緒類的常用方法(2)執行緒的同步機制(3)網路程式設計的常識(4)基於tcp協議的程式設計模型

默寫: 1.程式設計題 分別使用兩種方式啟動一個執行緒,在該執行緒的run()方法中列印1 ~ 20之間的整數。 作業: 1.思考:建立和啟動執行緒兩種方式之間的區別? a.自定義類繼承Thread類並重寫run()方法,建立該類的例項去呼叫start()方法。 b.

將引數從“const char轉換wchar_T

一、問題描述         CString str("add\df");         int n = str.Find("\\"); VS 2010編譯是報如下錯誤:  不能將引數1從“sons

HDU 6318 Swaps and Inversions 思路很巧妙!!!轉換樹狀數組或者歸並求解逆序數

eve because owb else 離散化 try 自己 title esp Swaps and Inversions Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja

python中,如何將字串轉換數字將數字轉換整型,字串的10轉換整型的10,10.5轉換10

說明:   在實際的應用過程中,有的時候可能會遇到字串的10,需要將字串的10轉換為數字的10   在此記錄下,通過int函式轉換的過程。 操作過程: 1.將字串轉換為整型的10 >>> str1 = "10" #將一個字串的10賦給變數str1 >&g

C++快速判斷二進位制10

      其實原理很簡單,1BYTE = 8bit,bit是二進位制,根據8421編碼就很容易得出相對應的位,8bit中分為高4位和低4位,這樣可以從低位到高位 bit0-bit7 得到表示為:  

C++ 對清零1

原諒連結 如何對某一位置0或者置1? 方法一: 寫成巨集,方便移植 #define setbit(x,y) x|=(1<<y) //將X的第Y位置1 #define clrbit(x,y) x&=!(1<<y) //將X的第Y位清0

MFC遇到的一個字符集問題:不將引數1從“const char []”轉換“LPCTSTR”

1、ANSI(即MBCS):為多位元組字符集,它是不定長表示世界文字的編碼方式。ANSI表示英文字母時就和ASCII一樣,但表示其他文字時就需要用多位元組。2、Unicode:用兩個位元組表示一個字元的編碼方式。比如字元'A'在ASCII下面用一個位元組表示,而在Unicode下面用兩個位元組表示,其中高位元

Oracle 12.1.0.2 卸載數據

ssi his listener sep directory odi ani ted pre 本案例數據庫(12.1.0.2)安裝在文件系統上,因此只需要deinstall 數據庫即可。 前提: (1)關閉數據庫,shutdown immediate; (2)關閉監聽,ls

如何將RGB通道3附圖merge幅彩色圖

#include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include"opencv2/opencv.hpp" using namespace std;

關於 錯誤 C2440 “初始化”: 無法從“const char *”轉換“cv::Formatted *”的種可能

嚴重性 程式碼 說明 專案 檔案 行 禁止顯示狀態 錯誤 C2440 “初始化”: 無法從“const char *”轉換為“cv::Formatted *” f:\opencv\opencv\build\include\opencv2\core\ptr.inl

解決不從CONST CHAR *轉換LPCWSTR

有時候複製了整個框架程式確發現有編譯不通過的問題,命名人家的程式編譯能通過,到了自己編譯的時候卻編譯不能通過,這個時候也許有各種問題,有些問題讓人匪夷所思。 編譯器有時候會根據編碼方式來選擇定義為LPCWSTR還是LPCTSTR LPSTR: 32bit

Android開源:款你不可錯過的可愛&小資風格的載入等待控制元件

前言 Android開發中,載入等待的需求 非常常見 本文將帶來 一款 可愛 & 小資風格的載入等待Android自定義View控制元件的使用,希望你們會喜歡。 目錄 1. 簡介 一款 可愛 、清新 & 小

1篇 Qt5基礎Qt開發環境的搭建和hello world

1、開發qt可以使用那些IDE? 使用Qt Creator進行Qt開發; 使用VS進行Qt開發; 不用IDE,直接使用記事本也可以編寫Qt程式。 2、在專案模板中選擇Application,然後選擇Qt Widgets Application,這樣便會生成一個桌面Qt圖

提示 Solr suggest

watermark 搜索 gen ets con 技術 結果集 推薦 ack 電商搜索中要實現這麽一塊功能,當輸入文字時候。下拉框提示。類似於百度搜索 在師出名門的基於lucene的solr搜索引擎中。提供了 拼寫檢查和智能提示這塊功能。 拼寫檢查就是用來檢

Mysql數據優化

效率 dir sort variables 緩存 模型 mysql5.6 包含 dpt 參考 http://www.jb51.net/article/82254.htm 今天,數據庫的操作越來越成為整個應用的性能瓶頸了,這點對於Web應用尤其明顯。關於數據庫的性能,這並不只

NIO原理剖析與Netty初步----淺談高性服務器開發

返回 創建 基於 register 訪問 io操作 nbsp info class 除特別註明外,本站所有文章均為原創,轉載請註明地址 在博主不長的工作經歷中,NIO用的並不多,由於使用原生的Java NIO編程的復雜性,大多數時候我們會選擇Netty,m

Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安裝手冊抹曦陽

oracl track microsoft sun msu ica http net ref Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安裝手冊(一抹曦陽).pdf下載地址 ,step by step

mysql性優化

配置文件 mysql 數據庫 網絡 信息 mysql性能優化、慢查詢分析、優化索引和配置一.每項的基本思路步驟1.性能瓶頸定位:show命令、慢查詢日誌、explain分析查詢、profiling分析查詢、2.索引及查詢優化3.配置優化二.my