首页| 论坛| 消息

标题:Qt开发经验小技巧146-150
作者:liudianwu
日期:2021-04-24 09:43
内容:

146. Qt中自带的很多控件,其实都是由一堆基础控件(QLabel、QPushButton等)组成的,比如日历面板 QCalendarWidget 就是 QToolButton+QSpinBox+QTableView 等组成,妙用 findChildren 可以拿到父类对应的子控件集合,可以直接对封装的控件中的子控件进行样式的设置,其他参数的设置比如设置中文文本(默认可能是英文)等。
```cpp
//打印子类类名集合
void printObjectChild(const QObject *obj, int spaceCount)
{
qDebug() metaObject()->className())
.arg(obj->objectName());
QObjectList childs = obj->children();
foreach (QObject *child, childs) {
printObjectChild(child, spaceCount + 2);
}
}
//拿到对话框进行设置和美化
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);
QLabel *lookinLabel = fileDialog->findChild("lookInLabel");
lookinLabel->setText(QString::fromLocal8Bit("文件目录:"));
lookinLabel->setStyleSheet("color:red;");
//设置日期框默认值为空
QLineEdit *edit = ui->dateEdit->findChild("qt_spinbox_lineedit");
if (!edit->text().isEmpty()) {
edit->clear();
}
```
147. Qt内置了各种对话框,比如文件对话框-QFileDialog ,颜色对话框-QColorDialog ,默认都会采用系统的对话框风格样式,这样可以保持和系统一致,如果不需要的话可以取消该特性,取消以后会采用Qt自身的对话框,这样才能进行美化和其他处理。
```cpp
QFileDialog *fileDialog = new QFileDialog(this);
//不设置此属性根本查找不到任何子元素,因为默认采用的系统对话框
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true); ..


#1 [九重水 04-24 10:37]
斗皇,
周六还不休息?
#2 [apud 04-24 13:45]
牛逼。什么时候出书啊
#3 [snow_man_0 04-24 17:30]
我是觉得,虽然lambda表达式书写方便,但槽函数不推荐lambda表达式。因为代码检查时,一般就看头文件,容易漏掉lambda表达式的槽函数,破坏了代码的可读性,应统一使用成员函数
#4 [logic4648 04-27 13:56]
走心走肾

回复 发表
主题 版块