QT编程经验

转载 2013年12月04日 14:13:46

如何添加自定义的slot函数。... 1

Qt标准对话框之QMessageBox. 2

Qt 中如何使用外部链接库... 6

如何将qte默认的绿色背景设置为透明... 6

布局的时候设置左,上,右,下的距离... 6

如何加载图片... 7

在Qt4中如何为对话框设置背景?... 7

 

 

 

 

 

 

 

如何添加自定义的slot 函数。

以添加recordOnRadioButtonClickedHandle函数为例。

1 头文件里定义recordOnRadioButtonClickedHandle函数,并在.cpp 文件里实现函数主体内容。

setuppage.h

public slots:

void recordOnRadioButtonClickedHandle();

 

setuppage.cpp

voidSetupPage::recordOnRadioButtonClickedHandle()

{

printf("recordOnRadioButtonClickedHandlehandle!\n");

return;

}

2 与信号连接。

connect(recordOnRadioButton,SIGNAL(clicked()),this,SLOT(recordOnRadioButtonClickedHandle()));

 

3 对文件里添加

Q_OBJECT

4 重新生成makefile

 

 

Qt标准对话框之QMessageBox

  这次来说一下QMessageBox以及类似的几种对话框。其实,我们已经用过QMessageBox了, 就在之前的几个程序中。不过,当时是大略的说了一下,现在专门来说说这几种对话框。

  好久没有更新博客,主 要是公司里面还在验收一些东西,所以没有及时更新。而且也在写一个基于Qt的画图程序,基本上类似于PS的东西,主要用到的是Qt Graphics View Framework。好了,现在还是继续来说说Qt的标准对话框吧!

  这次来说一下QMessageBox以及类似的几种对话框。其实,我们已经用过QMessageBox了,就在之前的几个程序中。不过,当时是 大略的说了一下,现在专门来说说这几种对话框。

  先来看一下最熟悉的QMessageBox::information。我们在以前的代码中这样使用过:


QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

  下面是一个简单的例子:

  

  现在我们-


  static StandardButton QMessageBox::information ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );

  首先,它是static的,所以我们能够使用类名直接访问到(怎么看都像废话…);然后看它那一堆参数,第一个参数parent,说明它的父组 件;第二个参数title,也就是对话框的标题;第三个参数text,是对话框显示的内容;第四个参数buttons,声明对话框放置的按钮,默认是只放 置一个OK按钮,这个参数可以使用或运算,例如我们希望有一个Yes和一个No的按钮,可以使用QMessageBox::Yes| QMessageBox::No,所有的按钮类型可以在QMessageBox声明的StandarButton枚举中找到;第五个参数 defaultButton就是默认选中的按钮,默认值是NoButton,也就是哪个按钮都不选中。这么多参数,豆子也是记不住的啊!所以,我们在用 QtCreator写的时候,可以在输入QMessageBox::information之后输入(,稍等一下,QtCreator就会帮我们把函数签 名显示在右上方了,还是挺方便的一个功能!

  Qt提供了五个类似的接口,用于显示类似的窗口。具体代码这里就不做介绍,只是来看一下样子吧!


  QMessageBox::critical(NULL, "critical", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

  


  QMessageBox::warning(NULL, "warning", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

  


  QMessageBox::question(NULL, "question", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

  


  QMessageBox::about(NULL, "About", "About this application");

  

  请注意,最后一个about()函数是没有后两个关于button设置的按钮的!

  QMessageBox对话框的文本信息时可以支持HTML标签的。例如:


  QMessageBox::about(NULL, "About", "About this application");

  运行效果如下:

  

  如果我们想自定义图片的话,也是很简单的。这时候就不能使用这几个static的函数了,而是要我们自己定义一个QMessagebox来使 用:


   QMessageBox message(QMessageBox::NoIcon, "Title", "Content with icon.");
   message.setIconPixmap(QPixmap("icon.png"));
  message.show();

  需要注意的是,同其他的程序类似,我们在程序中定义的相对路径都是要相对于运行时的.exe文件的地址的。比如我们写"icon.png",意 思是是在.exe的当前目录下寻找一个"icon.png"的文件。这个程序的运行效果如下:

  

  还有一点要注意,我们使用的是png格式的图片。因为Qt内置的处理图片格式是png,所以这不会引起很大的麻烦,如果你要使用jpeg格式的 图片的话,Qt是以插件的形式支持的。在开发时没有什么问题,不过如果要部署的话,需要注意这一点。

  最后再来说一下怎么处理对话框的交互。我们使用QMessageBox类的时候有两种方式,一是使用static函数,另外是使用构造函数。

  首先来说一下static函数的方式。注意,static函数都是要返回一个StandardButton,我们就可以通过判断这个返回值来对 用户的操作做出相应。


QMessageBox::StandardButton rb = QMessageBox::question(NULL, "Show Qt", "Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
  if(rb == QMessageBox::Yes)
  {
    QMessageBox::aboutQt(NULL, "About Qt");
  }

  如果要使用构造函数的方式,那么我们就要自己运行判断一下啦:


  QMessageBox message(QMessageBox::NoIcon, "Show Qt", "Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, NULL);
  if(message.exec() == QMessageBox::Yes)
  {
    QMessageBox::aboutQt(NULL, "About Qt");
  }

  其实道理上也是差不多的。

 

 

 

 

Qt 中如何使用外部链接库

在.pro 文件使用情况如下所示。

LIBS=./cores/libcores.a

如何将qte 默认的绿色背景设置为透明

Qte 启动时会将背色设置为绿色背色,这个颜色实在是太恶心了, 现需要OSD层与视频层叠加显示,需要设置背色绿色为透明。我的实现方法如下

1 设置framerbuffer,定义TRANSPARENT_COLOR颜色不显示。

 

       stColorKey.bKeyEnable = HI_TRUE;

        stColorKey.u32Key = TRANSPARENT_COLOR;

       stColorKey.bMaskEnable = HI_FALSE;

       stColorKey.u8BlueMask = 255;

       stColorKey.u8RedMask = 255;

       stColorKey.u8GreenMask = 255;

 

       if (ioctl(m_Fb.FrameBufferFd, FBIOPUT_COLORKEY_HIFB, &stColorKey)< 0)

       {

           return -OEC_HARDWAREERROR;

       }

注:TRANSPARENT_COLOR颜色的RGB值分别为255,0,0

 

2 设置QT的背景色为TRANSPARENT_COLOR

    QBrush *BackColor = new QBrush(QColor(255,0,0)); //设置背景颜色

QWSServer::setBackground(*BackColor);//应用背景颜色

 

布局的时候设置左,上,右,下的距离

我用红字圈不来的那哥们的回答确实很有用。还有vlolv那哥们的回答很准确的解释了我的疑问。也是,你既然要设定坐标为什么还让QT去layout,明摆了没事找事么。
jwvwv的两个方法我只试了setContentsMargins,发现其实很管用,查看文档,

void QWidget::setContentsMargins ( int left, int top, int right, int bottom )

Sets the margins around the contents of the widget to have thesizes lefttopright,and bottom. The margins are used by the layoutsystem, and may be used by subclasses to specify the area to draw in (e.g.excluding the frame).

Changing the margins will trigger a resizeEvent().

噢,原来就是布局的时候设置实际的距离左,上,右,下的距离,这样其实就基本实现了我的要求。我设置坐标其实不是死的,只是想让他距离上边框有一定的距离。

 

如何加载图片

有两种方法,一种是加载直接路径

1 加载图片的直接路径,例如图片在当前文件夹下的image目录下。

image.load("./images/mainwindow_background.png");

 

2 加载图片的相对路径

image.load(":./images/mainwindow_background.png");

当以此种形式加载图片时,图片的路径也是要在qrc文件里进行定义的。

<file>images/mainwindow_background.png</file>

这样意义统一更改图片的路径, 当切换主题的时候只用切换qrc文件便可。

 

Qt4中如何为对话框设置背景?

答:这个问题值得总结一下。大致有以下的思路和方法:

1.重写paintEvent()事件

在该事件中用画笔QPainter重画整个背景。该方法比较复杂,不建议初学者采用。

2.使用调色板类QPalette

  //以下代码中pWidget为指向要设置的widget的指针。   
QPalette palette = pWidget->palette();   
palette->setBrush(QPalette::Active,QPalette::Window,QBrush(Qt::red));  
pWidget->setPalette(palette);  
pWidget->setAutoBackground(true);   

推荐使用这种方法,大家可以查看一下setBrush()方法的定义:

  Palette::setBrush ( ColorGroup group,ColorRole role, const QBrush & brush )  
 这个是一个重载版本,最为重要的是第二个参数,可以设置许多不同的类型。举例来说, 如果pWidget指向的是一个QListWidget或者QTextEdit对象,如果把第二个参数设置成QPalette::Text,则是设置其中文字的颜色;如果第二个参数是QPalette::BrightText,则是设置该对象被选中时,其文字的颜色;如果第二个参数QPalette::Bright则表示设置选中该对象时,高亮背景的颜色或者图片。该函数的功能是很强大的。

3.使用样式表。

 pWidget->setStyleSheet("background-color:blue;"); //设置背景颜色   
pWidget->setStyleSheet("background-image:url(:/folder/show.bmp);");//设置背景图片此外,还有一些很有意思的方法,比如用setHtml(),insetHtml()这种用HTML语言的方式来指定的等等,大家可以多查查帮助文档搜索一下。

4.具体例子

  //设置为固定颜色 QPalette pal =pWidget->palette();   
pal.setColor(QPalette::Background, QColor(0,0,0));//黑色  
pWidget->setPalette( pal ); //背景图片   
QPalette pal = pWidget->palette();   
pal.setBrush( QPixmap(图片文件名) ); //黑色   
pWidget->setPalette( pal );

Qt编程学习经验

知识是死的,如何学会运用知识解决问题才是能力。所以希望读者学东西不要学死了,尽信书不如无书, 时代在变化,知识在更新,不能固定在旧知识点上。要学会学习新知识,动脑分析问题,动手解决问题, 这是忠告,希...
  • u013199483
  • u013199483
  • 2017年04月12日 10:32
  • 211

程序员如何积累编程技术或编程经验?

工作中总是被问到程序员如何积累编程技术或编程经验?首先我认为编程是一门实践性的很强的艺术,所以貌似唯有实践才能积累。然而把它当作一个个人软件过程(PSP)的问题,总感觉是有一些规律、规则或建议可以解答...
  • liulihuo_gyh
  • liulihuo_gyh
  • 2015年11月08日 20:25
  • 588

写给已有编程经验的 Python 初学者的总结

当我开始学习Python的时候,有些事我希望我一早就知道。我花费了很多时间才学会这些东西。我想要把这些重点都编纂到一篇文章当中。这篇文章的目标读者,是刚刚开始学习Python语言的有经验的程序员,想要...
  • werm520
  • werm520
  • 2014年11月03日 15:31
  • 1940

1年经验与10年经验一样的代码!程序员该如何回归简单?

一个1年编程经验、一个2年编程经验、一个3年编程经验、一个5年编程经验和一个10年编程经验的不同写法。这些写法中,让人啼笑皆非的是5年工作经验的程序员编写的代码看起来如此的复杂...
  • zzzdiya
  • zzzdiya
  • 2017年05月24日 14:39
  • 212

一位IT牛人的十年经验之谈

1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”   其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“...
  • u014234850
  • u014234850
  • 2015年01月23日 23:10
  • 545

Qt之网络编程

简述Qt Network模块提供的类允许编写 TCP/IP clients 和 servers。其中包含一些低级别的类,例如:QTcpSocket、QTcpServer 和 QUdpSocket,表示...
  • u011012932
  • u011012932
  • 2016年08月19日 16:59
  • 9646

Qt网络编程-http操作

前几天看到了一个关于Qt网络相关操作的博客,里面讲述的是如何从百度里面下载音乐和试听音乐的,感觉挺神秘的,当然更多的是好奇,这样利用这个东东不是以后可以做很多东西,可以从一些网站上获取自己需要的信息,...
  • lmzqm
  • lmzqm
  • 2014年01月12日 15:32
  • 1286

Qt 5入门指南之Qt Quick编程示例

Qt 5入门指南之Qt Quick编程示例           使用Qt创建应用程序是十分简单的。考虑到你的使用习惯,我们编写了两套教程来实现两个相似的应用程序,但是使用了 不同的方法。在开始...
  • chenlong12580
  • chenlong12580
  • 2013年02月03日 16:24
  • 48594

高效自学编程的经验一

经过大概三个月的每日每夜的学习,我现在对ssh有了一定的认识,但是还离熟练掌握相差甚远。 我自己的弊病: 1,容易被某些不是主要的问题也不是很关系理解的东西吸引注意,从而忽略了主要问题,这样就造成...
  • freeideas
  • freeideas
  • 2015年02月27日 17:18
  • 410

Qt图形用户界面编程技术入门

本文向读者介绍利用Qt开发图形用户界面的应用程序的入门知识。这里,我们首先介绍了如何搭建Qt的开发环境,之后通过一些简单的示例程序来循序渐进地介绍Qt的“信号和槽”以及布局等基本概念。我们希望以此来帮...
  • u014070670
  • u014070670
  • 2014年12月29日 09:30
  • 7903
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT编程经验
举报原因:
原因补充:

(最多只允许输入30个字)