由于QT的文档都是英文,本渣渣的英文水平为0,只能靠着谷歌翻译来勉强度日。
所以把用过的语法,学过的语句来记录下来,已备不时之需。
QAbstractButton
已知子类:
- QPushButton
- QToolButton
- QCheckBox
connect(ui.PushButton, SIGNAL(clicked()), this, SLOT(Function()));//单击事件
connect(ui.toolButton, SIGNAL(toggled(bool)), this, SLOT(OnToolButtonX(bool)));//信号:按键按下或者弹起。需要Checkable属性为真。
isChecked();//判断按下还是弹起状态,需要Checkable属性为真。否则无效。
SIGNAL
connect(ui.lineEdit, SIGNAL(selectionChanged()), this, SLOT(Function()));//获得焦点事件。
Function
成员函数,各个控件有通用的。
ui.checkBox->isChecked();//判断是否选中,返回bool
ui.checkBox->setEnabled(true);//设置控件是否被禁止。参数为bool.
QmessageBox
QMessageBox megBox;//声明并定义变量。
mesBox.setText("abc");//设置信息框文字。
mesBox.exec();//显示框体。
QMessageBox::information(this, "Error", "bad bady"); //弹出信息框,提示信息,标题.
Qcombobox
connect(ui.comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(OncomboBox(int)));//信号:当索引改变的时候。
ui.comboBox->addItem("lineEdit", "1");//插入文本并且插入关联数据
ui.comboBox->insertItem(2, "yxz", "5");//插入文本和关联数据再索引位置为2。
int index = ui.comboBox->currentIndex();//获得当前索引。
QString text = ui.comboBox->itemData(index).toString();//获得索引位置的关联数据
QString text1 = ui.comboBox->itemText(index);//获得索引位置的文本
QString text2 = ui.comboBox->currentText();//获得文本
ui.comboBox->setEditable(true);//设置comboBox是否可以编辑。
ui.comboBox->setEditText("asdf");//设置当前文本.
字符集
- 编码和字节的问题:
- 各种编码库的不同,定义的长度不同。例如:ascii码只占用1个字节,GBK编码却要占用2个字节。这是规定不同导致。
- Unicode 又称统一码,解决了各国编码不统一的问题,有3种格式:
- utf-8 比较常用的就是utf-8.utf-8是自动判断字的二进制编码,用1-4的字节来存储。
- utf-16 2个字节存储。例如:’我’GBK下3个字节,用utf-8也是3个字节,但是用utf-16,2个字节就能保存。
- utf-32 4个字节存储。
QTextCodec
QTextCodec* pCode = QTextCodec::codecForName("GBK");//先设置这个编码格式。(匹配解码器,未匹配返回0)
if(!pCode) return "";
QByteArray arr = pCode->fromUnicode(qstr);//将str用Unicode-16的编码解码,并且返回QByteArray类型。
string cstr = arr.constData();//和data略有区别,data会导致深拷贝,constData不会进行拷贝,只是只读。
QString str = "你好中国";//编码不对。cpp默认GBK编码,所以"你好中国"这个字符串字面常量是一个GBK编码的。QString默认编码unicode-16
ui.lineEdit->setText(str);//所以显示乱码。
//GBK转到QString
QString str1 = QString::fromLocal8Bit("你好中国");//转换到本地默认编码,从GBK转到QString
ui.lineEdit->setText(str1);
//QSstring 转 GBK
QString str = ui.lineEdit->text();
QByteArray bytes = str.toLocal8Bit();//转换到本地默认编码,vs也就是GBK编码了。所以转到GBK编码。
// const char * gbk = bytes.data();//获取地址就好了。
//utf-8 转 utf-16
char utf8[] = {0xE5, 0x88, 0x98,0xE4, 0xBA, 0x9A, 0xE8, 0xA5, 0xBF,0};//UTF-8编码内存.
QString str2 = QString::fromUtf8(utf8);//转换UTF-16
//utf-16 转 utf-8
QString str = ui.lineEdit->text();//获得文本
QByteArray bytes = str.toUtf8();//转换到utf-8
const char * utf8 = bytes.data();//获得地址
int size = bytes.size();
QString str1 = QString::fromUtf8(utf8);//再转换到utf-16格式。
QDialog(对话框)
- 先创造一个类,父类是QDialog
- 然后在主程序加载这个类的头文件即可进行操作
//构造函数内添加初始值,添加一个const char * text;
Dialog(const char * text,QWidget *parent = 0);
//新建一个Dialog类型。
Dialog buf("shaofa", this);
int ret = buf.exec();//模式对话框会阻塞程序。点击按钮会调用对象框的按钮时间。返回值由自己设置。
if(ret == buf.Accepted && buf.m_user == buf.m_password)//如果点击确定的话。
{
qDebug() << buf.m_user << buf.m_password;
}
QString filename = QFileDialog::getOpenFileName(this, x);//设置标题。x代表UTF-16编码,打开文件
QString filename = QFileDialog::getSaveFileName(this, GBK::ToUnicode("保存文件"));//保存文件