关闭

QT编程经验

480人阅读 评论(0) 收藏 举报
分类:

如何添加自定义的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 );

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21493次
    • 积分:555
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:13篇
    • 译文:1篇
    • 评论:0条