前情回顾:
我又有一个多月没写博客了,上个月太忙了,忙着毕业设计跟论文,请了一个多月的假,实习也快结束了,我把我遇到的写下来,大家一起学习。
内容:
一、trimmed //删除字符头尾空格
二、setEchoMode //设置密码保护(输入字符为小黑点)
//输入什么就显示什么
1、echoLineEdit->setEchoMode(QLineEdit::Normal);
//密码,一般是用小黑点覆盖你所输入的字符
2、echoLineEdit->setEchoMode(QLineEdit::Password);
//编辑时输入字符显示输入内容,否则用小黑点代替
3、echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
//任何输入都看不见(只是看不见,不是不能输入)
4、echoLineEdit->setEchoMode(QLineEdit::NoEcho);
三、setFocus 设置光标的位置
四、给按钮删除立体感 控件->setFlat(true);
五、background-position:center;background-repeat:no-repeat 背景图片 居中与平铺
六、v->setSizeConstraint(QLayout::SetFixedSize) 窗口会随着内容的多少调整窗口大小
七、QT之单步调试:在工具中的调试器中源码路径映射中的添加qt源码:把qt的安装路径放进去。
八、对于QTabWidget这个控件类来说,要给每个菜单设置背景记得要加::pane,或者QTabWidget QWidget#objectName(菜单的name)
九、QComboBox信号与槽函数
connect(m_pComboBox_InputType,SIGNAL(currentTextChanged(QString)), this, SLOT(on_comboBox_currentTextChanged()));
void AddPara::on_comboBox_currentTextChanged()
{
if(m_pComboBox_InputType->currentText().compare("select") != 0)
{
m_pLabItems->hide();
m_pLineEdit_Items->hide();
}
else
{
m_pLabItems->show();
m_pLineEdit_Items->show();
}
}
十、如果有时候setStyleSheet不起作用,就要重写paintEvent事件进行重载
11、
QPixmap p(获取图片路径);
控件->setPixmap(p);//设置显示的图片
12、
滚动条:
QScrollArea *scroll = new QScrollArea();
QWidget *widget = new QWidget();//对该widget中的布局已经完成
scroll->setWidget(widget);
13、getItemPosition函数:
int index = btn->boxV->indexOf(btn);//get btn position
int row , column, rowSpan, columnSpan;
if(-1 != index)
{
btn->boxV->getItemPosition(index, &row, &column, &rowSpan, &columnSpan);//Location information of index control
}
14、
DESTDIR = $$PWD/../bin/debug // 放置目标文件。
将debug与release版本生成的目标文件分别放置想要的文件夹:
CONFIG(debug,debug | release):DESTDIR = $$PWD/../../../../Simulator
else:DESTDIR = $$PWD/../build-uai-Desktop_Qt_5_6_3_MinGW_32bit-Release/release
debug:DESTDIR = $$_PRO_FILE_PWD_/../../../Win32/debug
release:DESTDIR = $$_PRO_FILE_PWD_/../../../Win32/release
15、关闭窗口出现警告:重载closeEvent(QCloseEvent *event),在函数中添加:
(另外,在函数中试用close()函数,会触发closeEvent事件,例如下面slotOk()函数,保存完文件之后,要关闭整个窗口,使用close(),返回值使用return不符合逻辑,使用exit(0)是正常程序退出的时候用到,虽然可以达到效果,只是这个函数是直接退出程序,析构那边好像有点问题,跟exit(1)是在非正常关闭程序时使用的函数,有所差别。再说回来,只能使用close()函数,解决办法就是加个全局变量来使用)。
int ret = QMessageBox::warning(0,"Tips",QString("Do you want to save it to the current path?"),QMessageBox::Yes
| QMessageBox::No| QMessageBox::Close,QMessageBox::No);
if(ret == QMessageBox::No )
{
event->accept();
}
else if(ret == QMessageBox::Yes)
{
slotOk();//文件保存
}
else
{
event->ignore();
}
16、布局QGridLayout,水平居中,靠右,靠左等
AlignLeft: 水平左对齐
AlignRight: 水平右对齐
AlignCenter:垂直、水平居中
AlignHCenter:水平居中
AlignTop:垂直上对齐
AlignBottom:垂直下对齐
AlignVCenter,:垂直居中
AlignBaseiine:垂直基线对齐
AlignJustify: 填满空间
QGridLayout *pLayout = new QGridLayout(this);
pLayout->addWidget(btn, 0, 0, Qt::AlignTop);
17、读取文件中的内容作用在setStylesheet函数中,文本中的注释用/*,//不起作用。
18、项目中添加lib,在pro中的LIBS下加-l…lib
19、QLabel的超链接:
pLab4->setOpenExternalLinks(true);
pLab4->setText(tr("<a href=\"http://www.123123.com.cn/\">http://www.123123.com.cn"));
20、背景渐变色:
double Rate = double(nY) / double(nHeight);
QString strStyleSheet = "QWidget {background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(232, 235, 238, 255), stop:";
strStyleSheet += QString::number(Rate);
strStyleSheet += " rgba(232, 235, 238, 255), stop:";
strStyleSheet += QString::number(Rate + 0.0001);
strStyleSheet += " rgba(151, 167, 182, 255), stop:1 rgba(151, 167, 182, 255));}";
this->setStyleSheet(strStyleSheet);
21、QDockWidget的初始化跟大小设置
22、子线程与GUI主线程通信,进行信号与槽时,connect函数里第五个参数添加(Qt::BlockingQueuedConnection)。
23、从路径中选择文件并打开文件,开始对文件操作:
QString strName = QFileDialog::getOpenFileName(this, "Tipic");
QFile file(strName .trimmed());
24、QFileDialog类,getSaveFileName(选择文件保存),getOpenFileName(打开文件),以及后边的打开的文件类型条件:
QString fileNameConvert = QFileDialog::getSaveFileName(this, "ConvertFile",QString(),
"Link(*.l);;All Files(*.*)");
if(fileNameConvert.isEmpty())
{
return;
}
QFile fileConvert(fileNameConvert.trimmed());
QString strName = QFileDialog::getOpenFileName(this, "The file will be checked",QString(),"Link(*.l);;All Files(*.*)");
25、QString的截取:string.mid(start_index,lenth),第一个参数开始位置,第二个参数截取长度。
26、QString、QByteArray、std::string之间的差别:
QString与QByteArray之间的编码不一样,前者默认的是以unicode的字符串,后者是存取的数据,
string不说明编码输出汉字则会出现乱码。两者之间的转化网上都有,如果不转化,后者无法输出汉
字,是以十六进制来保存的。比如:
QByteArray byte("罗斯");QString str("罗斯");
byte那边就会变为6个字节,
qDebug之后为"\xE7\xBD\x97\xE6\x96\xAF","罗斯";直接转到QString就可以输出中文了。
前者在内部自动转化输出,两者都可以保存'\0',lenth函数不会到'\0'结束。
两者以"\xxx"来保存数据,是以八进制来保存的,比如:
QByteArray byte("\034"),QString str("\034"),
两者的ASCII码值是28,八进制是34,十六进制为1c,都是一个字节,前者输出“\x1C”,后者输出
“\u001C”。
但是如果是第三者不存在这个情况,遇到\0就会停 止。第二个如果是以八进制来保存的
可以使用toHex来输出十六进制。
1中的字符类型是QChar,2是char类型的,3是size_t(int 型转换成十六进制的是跟QByteArray中一样).
27、QLineEdit中的提示语句(在填写之前编辑框中有提示语句,写入之后就消失),使用setPlaceholderText函数,qLineEdit->setPlaceholderText(“提示”);
28、正则表达式:setValidator、setToolTip(鼠标悬停在文本框上会有提示)
QRegExpValidator validator = new QRegExpValidator(QRegExp("[0-9a-fA-F]{4}"), this);
ui->editLine->setValidator(validator);
ui->editLine->setToolTip("Attribute=HEX, Length= [4, 4]");
29、在拿到路径的情况下,得到文件名:
QFileInfo infoPathName = QFileInfo(strPathName);
QString strFileName = infoPathName .fileName();