您的位置:首页 > 编程语言 > Qt开发

QT使用笔记

2016-05-23 14:36 399 查看
label自适应显示图片大小

ui.label_3->setScaledContents(true);

/****************************************

QCombobox 设置

Qconbox = new QComboBox(this);//算法下拉菜单
Qconbox->setView(new QListView()); //设置item间距
Qconbox->setStyleSheet("QComboBox QAbstractItemView::item { min-height: 25px; min-width: 50px; }QListView::item:selected { color: black; background-color: lightgray}");
Qconbox->addItem(BianMa->toUnicode("粒子滤波"));
Qconbox->addItem(BianMa->toUnicode("  TLD  "));
Qconbox->setGeometry(105, 340, 100, 25);

**********************************

官方颜色设置
http://doc.qt.io/qt-5/stylesheet-examples.html
**************************

添加背景图片及底色

QImage image;
image.load("back.png");
setAutoFillBackground(true);   // 这个属性一定要设置
QPalette pal(palette());
pal.setBrush(QPalette::Window, QBrush(image.scaled(size(), Qt::IgnoreAspectRatio,
Qt::SmoothTransformation)));
setPalette(pal);

//设置背景颜色:
//this->setStyleSheet("background-color:rgb(255,34,198)");

如果widget是子窗口

设置背景图片

可以这样(1) :
QImage _image;

_image.load("./videoarea.png");

ui->widget->setAutoFillBackground(true);   // 这个属性一定要设置

QPalette pal(palette());

pal.setBrush(QPalette::Window, QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,
Qt::SmoothTransformation)));

ui->widget->setPalette(pal);

也可以这样(2) :
ui->widget->setStyleSheet("border-image:url(./videoarea.png)");

设置背景颜色:

ui->widget->setStyleSheet("background-color:rgb(255,34,198)");

总结:

1:不要在顶层窗口(无父类的窗口)中使用setStyleSheet() ,否则其一父窗口的背景不会改变,其次其子窗口的背景设置方法变得局限唯一,不能再使用其它方法!

2 :
2:如果一个一般窗口(非顶层窗口)还有子窗口,那最好不要使用setStyleSheet()来设置其背景颜色,因为虽然此时该窗口的背景设置是生效的,但是其子窗口的背景设置也变得局限唯一,只能使用setStyleSheet,而不能使用其它方法!  当然:你如果就是只想使用这种方法,那也完全可以!!
说白了就是:不要再MainWindow中使用setStyleSheet()!

************************************************************************

QT 5.6 中文显示乱码

解决:

QTextCodec * BianMa = QTextCodec::codecForName("GBK");

Record = new QPushButton(BianMa->toUnicode("中文显示!"), this);

********************************************************************

\moc”: No such file or directory

原因可能是重复包含头文件,删除部分不必要的头文件则问题解决了

*******************************************************************

1、在利用OpenCV 配合QT调用摄像头显示是会出现卡死的现象

原因可能是QT程序陷入了循环中,没法进入图片显示阶段,所以在循环中需要添加  qApp->processEvents();

while (capV.read(img))
{
QImage image = QImage((const uchar*)img.data, img.cols, img.rows, QImage::Format_RGB888).rgbSwapped();
lable->clear();
lable->setPixmap(QPixmap::fromImage(image));
lable->resize(img.cols, img.rows);
lable->show();

qApp->processEvents();
}

1、警告、信息对话框

  使用QMessageBox类的静态方法
  int ret = QMessageBox::warning(this, tr("Application"),
  tr("The document has been modified./n"
  "Do you want to save your changes?"),
  QMessageBox::Yes | QMessageBox::Default,
  QMessageBox::No,
  QMessageBox::Cancel | QMessageBox::Escape);
  if (ret == QMessageBox::Yes)
  return save();
  else if (ret == QMessageBox::Cancel)
  return false;
  或者简单点儿:
  QMessageBox::information(this, "关于","盲人辅助系统(管理端)!/nVersion:1.0/nNo Copyright");

2、QT中中文字体乱码的原因是没有定义相关的转换,可以使用使用tr()函数进行转换!!!

解决方法:在main函数中加入下面三条语句,但并不提倡

  QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

  QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

  或者

  QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

  QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));

  QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

  使用GBK还是使用UTF-8,依源文件中汉字使用的内码而定

  这样,就可在源文件中直接使用中文,比如:

  QMessageBox::information(NULL, "信息", "关于本软件的演示信息", QMessageBox::Ok,

QMessageBox::NoButtons);
3、文件控件/获取打开文件夹

QString filePaht = QFileDialog::getExistingDirectory();
if (!filePaht.isEmpty()) // ok
QRecordPath->setText(filePaht);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: