qt使用中的一些问题(linux)

ui_xxx.h的问题

工程中(工作空间)中包含的ui_xxx.h文件是系统自动生成的。这个是xxx.ui的创建文件来的,xxx.ui界面上的都是ui_xxx.h在控制的,在项目里是不显示这个头文件的,如果你想用xxx.ui界面的控件,那你直接包含:ui_xxx.h就可以了。

 

对窗体中所有按钮进行设置

1.对窗体中所有的按钮文字置左

 qApp->setStyleSheet("QPushButton{text-align : left;}");

 

2.将窗体中所有按钮置成圆角的

 qApp->setStyleSheet("QPushButton{border:2px groove gray;border-radius:10px}");

 

解决显示乱码的问题

    QString temp;
    temp = temp.fromLocal8Bit("摄像头已打开");
    this->ui->pushButton_17->setText(temp);

 

摄像头需要重新插拔,软件需要重启才能打开摄像头的问题

报错类似如下

libv4l2: error setting pixformat: 设备或资源忙

Unable to query number of channels

解决方法是在程序中加入下面语句

#include <QtGui>
#include <QMessageBox>

QProcess *RosCloseRosmaster = new QProcess;
RosCloseRosmaster->start("killall -9 motion");

cvReleaseImage(&pFrame);
cvReleaseCapture(&pCapture);

 

对显示中图像大小的重新调整

  1. 如果是Mat格式的话可以直接调用opencv的调整函数

      cv::Mat image1 = img.clone();
      int myheight =ui->label->height();
      int mywidth = ui->label->width();
      cv::resize(img, image1, cv::Size(mywidth, myheight));

 

IplImage与Mat之间的转换

直接使用转换方法

Mat img;

IplImage *src;

src=\'#\'" /p>

但是如果在单独定义的函数中进行转换的话会出现如下报错

taking address of temporary [-fpermissive]

这是因为操作取了临时变量的地址。返回后临时变量已经“消失”了,你不能再使用了。所以报错。

解决方法:设置中间变量:

IplImage temp = (IplImage)dst1;
IplImage *qImg=&temp;

所以最后变为

void face_dialog::matToIpl(cv::Mat rosImage)
{
  IplImage temp = (IplImage)rosImage;
  fromRosImage = &temp;
}

 

Mat转换到QImage

  cv::Mat img1(psmallface, true); //将psmallface图像深拷贝给img1,如果为false则为浅拷贝
  QImage img2;
  int nChannel=img1.channels();
  if(nChannel==3)
  {
      cv::cvtColor(img1,img1,CV_BGR2RGB);
      img2 = QImage((const unsigned char*)img1.data, img1.cols, img1.rows, QImage::Format_RGB888);
  }
  else if(nChannel==4||nChannel==1)
  {
      img2 = QImage((const unsigned char*)img1.data, img1.cols, img1.rows, QImage::Format_ARGB32);
  }

 

如果图像出现扭曲的话,将代码改为如下

Mat rgb;

if(img1.channels() == 3)    // RGB image  

{  

    cvtColor(img1,rgb,CV_BGR2RGB);  

    img2 = QImage((const uchar*)(rgb.data),  //(const unsigned char*)  

                      rgb.cols,rgb.rows,  

                      rgb.cols*rgb.channels(),   //new add  

                      QImage::Format_RGB888);  

}

else                     // gray image  

{  

    img2 = QImage((const uchar*)(img1.data),  

                      img1.cols,img1.rows,  

                      img1.cols*img1.channels(),    //new add  

                      QImage::Format_Indexed8);  

 

qt中msleep(),usleep(),sleep()等的头文件是unistd.h

 

使用vector(float类型)进行label显示

gl_ScanData.push_back(i); //将i的数压入vector末尾
ui->message_label->setText(QString("%1").arg(gl_ScanData[359])); //使用label进行显示第359个位置数

posted on 2017-10-10 22:00  悟江居士  阅读(1733)  评论(0编辑  收藏  举报

导航