1.去掉字符串前后的空格函数
QString QString::trimmed() const
去掉字符串开始和结束的空格( '\t', '\n', '\v', '\f', '\r', 和' ' )。
2.模式对话框
所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。
在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框;另一种是使用show()方法,它使得对话框既可以模态显示,也可以非模态显示,决定它是模态还是非模态的是对话框的modal属性。以模态的方式显示窗口,在用户关闭前将阻塞。函数返回窗口运行结果码。
application modal,阻塞住其它窗口。window modal,阻塞住父窗口。
3. QList 输出结果
QList<QString> list;
{
QString str("This is test string");
list << str;
}
qDebug() << list[0] << "How are you!" ; //输出 "This is test string" How are you!
qDebug() << list[0].toAscii().data() << "How are you!"; //输出 This is test string How are you!
4. Qt信号与槽
connect(sender,SIGNAL(singal),receiver,SLOT(slot));
这里的sender和receiver是指向QOBject的指针,signal和slot是不带参数的函数名。
要使信号成功连接到槽(或者连接到另一个信号),它们的参数必须具有相同的顺序和相同的类型。
5.QTimer类
QTimer类提供了定时器信号和单触发定时器。
它在内部使用定时器事件来提供更通用的定时器。QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。
注意当QTimer的父对象被销毁时,它也会被自动销毁。
实例:
QTimer *timer = new QTimer( myObject );
connect( timer, SIGNAL(timeout()), myObject, SLOT(timerDone()) );
timer->start( 2000, TRUE ); // 2秒单触发定时器
6.去掉标题栏和设置窗口透明用法
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("QQ ");
this->setWindowIcon(QIcon(":/images/po.jpg"));
this->setWindowFlags(Qt::FramelessWindowHint);//去掉标题栏
this->setGeometry(QRect(950, 55, 350, 250));//可设置窗口显示的方位与大小
//this->setWindowOpacity(0.7);//设置透明1-全体透明
this->setAttribute(Qt::WA_TranslucentBackground, true);//设置透明2-窗体标题栏不透明,背景透明
this->resize(300,300);//显示大小
}
QWidget::setWindowOpacity函数, 可以为窗体设置透明度, 从0.0到1.0之间, 值越小越透明。 经过设置的窗体可以整体呈现透明的效果。
7.为QWidget设置背景
若没有#号选择器,则是为每个子控件设置背景,效果不一样。
ui.msgBoxWidget->setStyleSheet("QWidget#msgBoxWidget{border-image: url(image/pressed.png);}");
8.鼠标左键事件监听
在eventFilter函数里:
if(ob == ui.xxxWidget) //某widget或控件事件处理
if(ev->type() == QEvent::MouseButtonRelease) //鼠标释放事件
{ Qt::MouseButton btn = static_cast
mousePressEvent按下时判断是否是左键:
if(event->button() == Qt::LeftButton)
mouseMoveEvent移动时判断左键是否按下:
if ((event->buttons() & Qt::LeftButton))
9.Qt的setMouseTracking使用
bool mouseTracking 这个属性保存的是窗口部件跟踪鼠标是否生效。 如果鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标按键被按下时,这个窗口部件才会接收鼠标移动事件。 如果鼠标跟踪生效,如果没有按键被按下,这个窗口部件也会接收鼠标移动事件。 也可以参考mouseMoveEvent ()和QApplication::setGlobalMouseTracking ()。 通过setMouseTracking ()设置属性值并且通过hasMouseTracking ()来获得属性值。
10.为ToolTip设置样式
QString getTooTipStr(QString str) { QTextEdit edite; edite.setTextColor(QColor(0,0,0)); edite.setText(str); edite.setGeometry(0,0,600,250); QString toolStr = edite.toHtml(); return toolStr; }
11.QMap
QMap
QMap
map.insert("first",1); //插入项
map["second"] = 2; //也可以这样给一个指定的键赋值
int val = map.value("first");
[]操作符既可以用于插入也可以用于检索。如果在非常量映射中使用[]为一个不存在的键检索值,则会用给定的键和空值创建一个新的项。
为了避免意外的创建新值,可以使用value()函数代替[]操作符来获得项。
12.MouseMoveEvent注意点
mouseMoveEvent时,event->button()为NoButton,没有鼠标
mousePreseEvent时,event->button()为LeftButton 或 RightButton等。
13.在.ui文件中部分控件不能设置字体大小问题
有可能在上层(不一定只向上是一层)控件的样式表里设置了字体,删掉就可以了。
14. QApplication::alert()函数
在 Windows 下是任务栏的窗口图标闪烁, Mac 下则是让 Dash 上的图标跳动起来。窗口被激活后闪烁停止,可用于提示用户有新消息。
15.SizePolicy属性
结合控件的SizePolicy属性,可以控制布局管理中的控件的尺寸自适应方式。
控件的sizePolicy说明控件在布局管理中的缩放方式。Qt提供的控件都有一个合理的缺省sizePolicy,但是这个缺省值有时不能适合所有的布局,开发人员经常需要改变窗体上的某些控件的sizePolicy。一个QSizePolicy的所有变量对水平方向和垂直方向都适用。下面列举了一些最长用的值:
A. Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。
B. Minimum:控件的sizeHint为控件的最小尺寸。控件不能小于这个sizeHint,但是可以放大。
C. Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小的允许尺寸。
D. Preferred:控件的sizeHint是它的sizeHint,但是可以放大或者缩小
E. Expandint:控件可以自行增大或者缩小
注:siz eHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)
16.QLineEdit密码输入框
echoMode 设置为 Password ,输入的文字显示为黑点。
字体大小即为黑点的大小:ui.passWd->setFont(QFont("YaHei", 9));
在将lineedit的echoMode属性设置为password后,inputMethodHints就默认开启了ImhHiddenText、ImhSensitiveData、ImhNoPredictiveTex这几个属性。
17.Qt 设置蒙板(setMask)
例如:(可以根据图片的不同,显示特殊形状的窗体)
QLabel topLevelLabel;
QPixmap pixmap(":/images/tux.png");
topLevelLabel.setPixmap(pixmap);
topLevelLabel.setMask(pixmap.mask()); //可对QWidget设置蒙板以显示特殊形状。
图片以外的区域不可见,仅可视区域能收到鼠标事件。
18.QTreeView 添加分组
QStandardItemModel *model = new QStandardItemModel; //标准模型
ui->treeView->setModel(model);
QStandardItem *group1 = new QStandardItem; //标准项
group1->setData("group1",0);
QStandardItem *item1 = new QStandardItem;
item1->setData("item1",0);
QStandardItem *group2 = new QStandardItem;
group2->setData("group2",0);
group1->appendRow(item1); //分组里的项
model->appendRow(group1); //分组
model->appendRow(group2);
19.QLabel显示圆角图片,消锯齿
方法1(样式表):
QPixmap pixmap(headFilePath);
int headWidth = ui->headLabel->width();
int headHeight = ui->headLabel->height();
QString smallImagePath = headFilePath + "_small.jpg";
pixmap.scaled(headWidth,headHeight).save(smallImagePath);
QString labelStyle = QString("QLabel{border: 1px solid rgb(91,135,152,100);"
"border-radius: 8px;"
"background-image: url(%1);}")
.arg(QFileInfo(smallImagePath).absoluteFilePath());//样式表
ui->headLabel->setStyleSheet(labelStyle);
方法2(设置蒙板):
QPixmap pixmap;
pixmap.load(CommonFun::getHeadPathUrl(strPicUrl));
setPixmap(pixmap.scaled( width(), height()));
update(0,0,width(),height());
this->repaint();
QBitmap bmp(width(), height());
bmp.fill(this,0,0);
QPainter p(&bmp);
p.setPen(Qt::NoPen);
p.setBrush(Qt::blue);
p.setRenderHint(QPainter::Antialiasing); //生成蒙板图片时消锯齿是没有用的
p.drawRoundedRect(bmp.rect(), 4, 4,Qt::AbsoluteSize);
setMask(bmp);
消锯齿:
painter->setRenderHints(QPainter::SmoothPixmapTransform);// drawPixmap时消锯齿
(1) listView中消锯齿
自定义delegate的paint()方法中,设置 painter。
(2)labe中消锯齿
重写paintEvent()方法,绘制图片drawPixmap前,设置painter。
蒙板图片:
例程:
(1) painter->setRenderHints(QPainter::SmoothPixmapTransform);//消锯齿
(2) const QBitmap maskImage = QBitmap("Resources/images/icon/ic_portrait_mask_90x90.png"); //蒙板图片
QSize iconSize = icon.size();
icon = icon.scaled(QSize(90,90));
icon.setMask(maskImage);
(3) painter->drawPixmap(iconRect,icon);
20. 获取QTextEdit光标位置
继承QTextEdit,重写eventFiler方法。
if(QEvent::InputMethod == _event->type())
{
QInputMethodEvent* ievent = dynamic_cast
if(!hasFocus())//已经失去焦点时
{
ievent->setCommitString("");//设置提交的字符串
}
else
{
if (!ievent->preeditString().isEmpty())//屏蔽预编辑的字符串
{
return true; //直接返回
}
}
}/*end of if(InputMethod)*/
22.双击时选中QLabel
设置label的属性:
setTextInteractionFlags(Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse) ;
23字符编码转换
将 KOI8-R编码的字符串,转为Unicode编码的字符串:
QByteArray encodedString = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);
将Unicode编码的字符串,转为本地编码字符串:
QString string = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodedString = codec->fromUnicode(string);
24.使用系统代理
备注:设置的是程序的代理的配置,对整个程序起作用。
25. Qt创建快捷方式
26. Qt鼠标移动事件(移动时判断左键是否被按下)
if(event->buttons() & Qt::LeftButton) //左键被按下
{
qDebug() << "鼠标已按下----- mouserMoveEvent";
}
else
{
qDebug() << "鼠标未按下----- mouserMoveEvent";
}
27.Qt窗口激活事件、窗口停用事件
QEvent::WindowActivate
- 窗口被激活了。QEvent::WindowDeactivate
- 窗口被停用了。