QT使用笔记
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);
转载自:https://blog.csdn.net/dearLeaflet/article/details/51476739