Qt开发中一下小细节问题

对于Qt开发过程中,做一个项目在一个大的对话框上锁话的时间相对来说较少,但是花在细节处理的方向上往往占用了很多时间,这次就来个好好的总结一下,自己项目开发中遇到的一些小问题,好让自己更好的记忆,提高自己开发的效率,同时也提供大家参考下,当然如果有错误的地方,还希望大家指出来,我好进行验证并修改,好啦!废话不多说,直接上代码。(开始的时候不进行划分,等有空了,再来划分)

1.对QTextEdit中对鼠标位置的调整

QTextCursor cursor = QTextEdit::textCursor();//获得编辑光标
cursor.setPosition();//设定光标位置
QTextEdit::setTextCursor(cursor);//将该光标返回到QTextEdit中,位置也是存在的

这样我们就可对QTextEdit中光标的位置进行你需要的调整。

2.如何使QLabel可以屏蔽HTML的代码

在开发过程中经常会用到Qlabel来显示一个字符串,但是如果这个字符串中包含html,那该怎么办呢?

比如说:QLabel strLabel("<font color=red>hello Qt</font>");

按着正常的显示的话,会显示成hello Qt已经不是我们要的效果啦!

这时候我们应该改变QLabel 的textFormat:  QLabel::setTextFormat(Qt::PlainText);

这样的话,你就可以搞定啦!

3.让QLabel处于可以选择的状态(可以通过鼠标来进行复制)

设置文本的互动:QLabel::setTextInteractionFlags(Qt::TextSelectableByMouse);//设置鼠标可以选择标志

QLabel::setTextInteractionFlags(Qt::TextSelectableByKeyboard);//设置键盘操作

4.QLabel的字体颜色

对于Qlabel的颜色,主要是通过俩种方式来实现一种是使用样式(setStyleSheet)还有一种就是使用调色板(QPalette),看代码

QLabel *label =new QLabel();

label->setstyleSheet("color:red");

label->setText("木子草33");

调色板

QPalette palette;

palette.setColor(QPalette::windowText,Qt::red);

label->SetPalette(palette);

通过将代码写入你会发现两者的效果是一样的。

5.事件过滤器

对不同的问题,有时候我们很难从最表层找出我们可以解决的方法,这时候深入一点,或许问题的解决难道就自然而然就降低啦!这就是我要说的事件过滤器。

对于事件的处理首先应该明白的是事件的类型,然后根据类型再往下一步分化,这样就可以实现我们所要的效果。

现在比如我们要一个对QTextEdit对Enter键的响应操作有俩种情况可以实现,首先要明白的是这个一个什么事件,它是一个keyPress的事件,所以我们响应它的事件处理,然后在keyPress中是要对其中Enter这个key做处理,所以我们现在就可以来做处理啦!

//首先要重写函数keyPressEvent的处理。

void textEdit::keyPressEvent(QkeyEvent *event)

{

if(event->key() == Qt::KeyEnter)

{

// 这里你可以完成你想要针对enter键的处理

}

else

QWidget::keyPressEvent(event);

}

当然这个不是我们要在事件过滤器要说明的内容,我们要做的是如何使用事件过滤器,使之能够满足我们的需求,接下来我将用项目中开发的实例来进行处理。

对于一个QLineEdit当编辑内容为空时出现一个提示“编辑内容不能为空”,当QLineEdit获得焦点后该提示消失。

背景:我们有一个QLineEdit的控件,并且我们需要对它的编辑状态进行处理,当编辑结束的时候,当窗口获得焦点的时候我们都有相应的处理。好吧!了解需求后就实现它吧!

QLineEdit *lineEdit = new QLineEdit();             //构建一个lineEdit
lineEdit->installEventFilter(this);                //对这个控件安装事件过滤器,这样我们就可以再事件处理函数中对该对象做相应的处理了。
connect(lineEdit,SIGNAL(editFinished()),this,SLOT(OnEditFinished()));//对LineEdit编辑完成创建一个槽来连接,主要是判断是否为空,如果为空的话,会显示提示信息
bool myapp::eventFilter(QObject *obj,QEvent *event)//对事件的处理
{
      if(obj == lineEdit)
     {
          if(event->type == QEvent::FocusIn)
         {
               //将提示的Label隐藏,主要是对QLineEdit的焦点事件处理。
		//如果想对该事件屏蔽的话,return true;
         }
     }
	return QWidget::eventFilter(event);
}


6.一个避免QStringList中QString重复的操作。

这个现象主要是在项目中有一个自动补全的功能,我需要将我每次输入的字符串放入到stringList中存放起来,这样就不会浪费啦!所以刚开始的操作主要是通过判断这个链表中是否contains(string)来进行判断。后再网上看到了这个方法,觉得还不错,果断替换掉,下面来看看这个方法吧!

QStringList strList;

strList<<hello<<zqm<<lm<<zqm<<hello;

strList = strList.toSet.toList();                  //这里对QStringList.toSet主要是QSet不允许重复,然后再调用toList这样又成为了QStringList

qdebue()<<strList;


7.继承类和子类之间的转换

在我们的项目开发中我们经常需要实现一个子类,来实现我们所需要的操作。这时我们就必须继承这个类来开发我们需要的窗口吧!在最近的开发过程中老是遇到这个问题,因此觉得很有必要将它记录下来,免得到时候忘记啦!

子类 = static_cast<子类*>(可以产生父类的操作); //这样操作后就可以将子类继续操作下去啦!

呵呵。。。。这种说法真的是很难让人理解呀!还是得有一个具体的例子来说明才行。ok,那就用事件过滤来说明吧!我们知道有很多种不同的事件在我们的事件过滤中,当然我们只需要从中选出我们所需要的然后再继续操作。

现在我们需要对回车这个键进行操作。

bool myApp::eventFilter(QObject *obj,QEvent *event)
{
      if(event->type() == QEvent::keyPress)
	{
            QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);  //将事件转换为具体的键盘事件,以便后面的操作
            if(keyEvent->key() == Qt::Key_Return)//判断是否为回车键
            {
                 //在这里可以做你想做的事
                 return true;
             }
        }

//希望通过这些代码你能理解我想说的东东。

}


8.任务栏图标闪烁


一个函数的问题,但是在查找的过程中还是费了点时间呀!

void QApplication::alert ( QWidget * widgetintmsec = 0 ) //警报

Causes an alert to be shown for widget if the window is not the active window.The alert shown for msec miliseconds.If msec is zero,then the alert is showm indefinitely until the window becomes active again;

9.Qt保存gif图片

开始真的觉得这个一个不好弄的问题,因为没有找到合适的方法,后来经组长的提醒,还是把它搞定啦!

无论保存是什么,都是通过对文件的操作!那就应该用文件的方法来实现它的操作,而不是用QImage的save的方法。

直接上代码:

QFile file(源路径);

file.copy(目标路径);

ok,这样操作就完成啦!看起来还真是简单呀!但是过程很艰难。。。。。继续奋斗!!!!!

10.QSS中透明的操作

对于QSS的使用,一个字爽,真的很爽!最近在做透明控件的时候,开始用Qpixmap的fill来操作,但是有的时候还是很不方便,因为毕竟你所处的环境不同所以也要有多样的操作才可以。今天重新搜索了下,发现QSS也可以有透明效果。感觉Qt很牛。

对于一般的话,你可以使用QColor(r,g,b,a);其中最好一个是透明度的值,255的

对于QSS来说rgba(r,g,b,a);就可以搞定啦!这个看自身需要来实现。











   

你可能感兴趣的:(qt,QT4,QTextEdit,QLabel)