QT-功能点记录

目录

1. 抓取当前屏幕

2. qt界面设置边框-样式表实现

3. QT QLabel设置字体和颜色

4. 窗口整体透明,但窗口内的控件不透明

5. 样式表

  5.1 QSpinBox,QTimeEdit

  5.2  QDialog设置圆角

  5.3 QSlider 滑块

 5.4  QRadioButton

 5.5  设置 QSS 的动态属性 -- setPropery

6. 半透明 遮罩

7.程序启动画面

8. 图片

8.1图片旋转

8.2 QT 控件导出为图片

9. QT对数字自动补0

10. 鼠标悬停在某窗口上,改变鼠标图片

11. 让Qt的窗口最小化最大化及关闭按钮都消失 ( &~ 与 | )

12. QSettings

12.1 字符串的序列化

12.2 QSettings读取带英文逗号的文本为空

13. QT 进程睡眠一段时间,其他 信号/槽 继续执行

14. 如何 死等 某异步函数执行完毕后,再执行其他函数 - QEventLoop::exec

15. QComboBox

15. 1 QComboBox 下拉列表样式

15. 2 QComboBox 为空时,显示 提示语; 且自动补全

16. QLabel 自动换行

17. QT 窗口拖动实现 - 两种方法

18. QT5 中文乱码解决方法

1、文件开头加入

2、QString 的方法

19. QT 数据库操作失败

20. Qt WebSocket 把网线后的重连通知

21.Qt webengine 模块,相关联的库

22.使用 QMediaPlayer 播放视频,黑屏现象

23.判断编译器类型、编译器版本、操作系统。

24. 软件设置最小化后, 再还原,所有子控件不刷新

25.获取标题栏高度

26.设置高分屏属性 以便支持高分辨率

27.Qtchart模块

28.使用 QEventLoop 解决耗时操作阻塞界面

29.无边框窗体 但 可以自由拉伸边框

30.QT 样式表不起作用

31.设置鼠标跟踪后,鼠标在子窗体上,父类无法获得鼠标移动事件

32.QT 容器,提升效率小技巧

33.使用 QWebEngineView 出现花屏,或其他问题

34.用 QFile + QTextStream 读写文件提供效率

35.用 QFile.readAll() 读取 QSS 可能出现问题

36.在尺寸改变的时候不重绘窗体

37.去掉获取焦点后的虚边框

38.判断当前Qt版本有没有某个模块

39.QTimer 定时器精度不够高问题

40.QT 文本显示,文字太多则会自动省略号显示,如何去掉省略号呢?

41.QVideoWidget 播放视频,遇到画面闪烁的情况

42.将 QString 类型的 IP 地址转化成 int 型,再比较大小

43. QT拦截 操作系统层的消息,如:系统休眠

44.QT 版本问题

45.QT 版本 最搭的编译器是哪个?

46.推荐的Qt论坛+个人博客+网站+群

47. C++ 与 QT 书籍推荐


1. 抓取当前屏幕

QPixmap m_loadPixmap = QPixmap::grabWindow(QApplication::desktop()->winId()); 

2. qt界面设置边框-样式表实现

ui->frame->setStyleSheet("#frame{border:2px solid #014F84}#background-color:#00d8ff");
// 2px  solid color 这个顺序不能错,就是这么坑人;

3. QT QLabel设置字体和颜色

//设置字号

QFont ft;
ft.setPointSize(12);
ui.label_4->setFont(ft);

//设置颜色
QPalette pa;
pa.setColor(QPalette::WindowText,Qt::red);
ui.label_4->setPalette(pa);

4. 窗口整体透明,但窗口内的控件不透明

// QT5 必须放在 ui->setupUi(this) 前;
setAttribute(Qt::WA_TranslucentBackground, true);

ui->setupUi(this);

5. 样式表

  5.1 QSpinBox,QTimeEdit

/*spinbox 抬起样式*/
QTimeEdit::up-button,QDoubleSpinBox::up-button,QSpinBox::up-button 
{
    subcontrol-origin:border;
    subcontrol-position:right;
    image: url(:/ico/up_right.png);
    width: 12px;
    height: 20px;       
}
QTimeEdit::down-button,QDoubleSpinBox::down-button,QSpinBox::down-button 
{
    subcontrol-origin:border;
    subcontrol-position:left;
    border-image: url(:/ico/up_left.png);
    width: 12px;
    height: 20px;
}
/*按钮按下样式*/
QTimeEdit::up-button:pressed,QDoubleSpinBox::up-button:pressed,QSpinBox::up-button:pressed
{
    subcontrol-origin:border;
    subcontrol-position:right;
    image: url(:/ico/pushed_right.png);
    width: 12px;
    height: 20px;       
}
  
QTimeEdit::down-button:pressed,QDoubleSpinBox::down-button:pressed, \
    QSpinBox::down-button:pressed,QSpinBox::down-button:pressed
{
    subcontrol-position:left;
    image: url(:/ico/pushed_left.png);
    width: 12px;
    height: 20px;
}

  5.2  QDialog设置圆角

// 1. QDialog 构造函数中,其中 juxing.png 为圆角图片;
QPixmap pm(":/subject/Resources/YingYu/juxing.png");
setMask(pm.mask());

// 2. 样式表中 写
QDialog#Dialog_ENYinBiao
{
    ... ...
    border-radius:1em;
}

  5.3 QSlider 滑块

// 水平 用 horizontal
// 垂直 用 vertical 
// 以水平为例,如下:

//首先是设置主体
QSlider#horizontalSlider_Pen{
    width: 493;
    height: 40;
    border:0px;
    opacity: 0.7;
}
/* 滑块 QSlider - handle */
QSlider#horizontalSlider_Pen::handle:horizontal{
    width: 30;
    height: 30;
    border:0px;
    opacity: 0.7;
    margin-left:30px; 
    margin-right:40px; 
    background-image: url(:/PenDialog/Resources/slider_handle.png);
}
/* 滑槽 QSlider - groove */
QSlider#horizontalSlider_Pen::groove:horizontal{
    width: 575;
    height: 34;
    border:0px;
    opacity: 0.7;
    background-image: url(:/PenDialog/Resources/slider_groove.png);
}

//还没有滑上去的地方
QSlider::add-page:horizontal
{
    background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 #bcbcbc, stop:0.25 #bcbcbc, stop:0.5 #bcbcbc, stop:1 #bcbcbc); 

}

//已经划过的从地方
QSlider::sub-page:horizontal
{                               
     background: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 #439cf3, stop:0.25 #439cf3, stop:0.5 #439cf3, stop:1 #439cf3);                     
}

 5.4  QRadioButton

QRadioButton {
    spacing: 5px;
    font-size: 14px;
    color: rgb(24, 220, 88);   # 连同 font-size一齐设置按钮的文本样式
}

QRadioButton::indicator {   # indicator是一个子组件,这里的width和height分别指定按钮的宽和高
    width: 13px;
    height: 13px;
}
 
QRadioButton::indicator::unchecked {   # 未选中时状态,也即正常状态
    image: url(:/images/radiobutton_unchecked.png);
}
 
QRadioButton::indicator:unchecked:hover {   # 未选中时,鼠标悬停时的状态
    image: url(:/images/radiobutton_unchecked_hover.png);
}
 
QRadioButton::indicator:unchecked:pressed {   #未选中时,按钮下按时的状态
    image: url(:/images/radiobutton_unchecked_pressed.png);
}
 
QRadioButton::indicator::checked {   # 按钮选中时的状态
    image: url(:/images/radiobutton_checked.png);
}
 
QRadioButton::indicator:checked:hover {   # 按钮选中时,鼠标悬停状态
    image: url(:/images/radiobutton_checked_hover.png);
}
 
QRadioButton::indicator:checked:pressed { # 按钮选中时,鼠标下按时的状态
    image: url(:/images/radiobutton_checked_pressed.png);
}

QRadioButton::indicator:disabled {  # 按钮禁用时的状态
    image: url(:/buttonbg/radio_disable);
}

 5.5  设置 QSS 的动态属性 -- setPropery

// 在代码中
iconLabel->setProperty("labelState", "hover");
textLabel->setProperty("labelState", "hover");

// 在 QSS 文件中
QLabel#objectname[labelState="hover"]
{
  image: url(:/Resouces/images/refresh.png);
}

/*鼠标划过按钮显示的文字样式*/
QLabel#objectname[labelState="hover"]
{
  color:rgb(0 ,255 , 252);
}

6. 半透明 遮罩

    //添加黑色遮罩
    QWidget *mask = new QWidget;
    mask->setAutoFillBackground(true);
    mask->setPalette(QPalette(QColor(0, 0, 0, 50)));//alpha为不透明度
    mask->resize(900, 600);

7.程序启动画面

    QApplication  app(argc, argv);
    
    //QTime提供了闹钟功能
    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));//secsTo()为返回当前的秒数
    
    QPixmap pix(":/images/logo.png");
    QSplashScreen splash(pix);
    splash.resize(pix.size());
    splash.show();

    app.processEvents();//调用该函数的目的是为了使程序在启动画面的同时仍然能够响应鼠标事件

    ...  ...

    splash.finish(&view);//当窗口view完成初始化工作后就结束启动画面

    app.exec();

8. 图片

8.1图片旋转

  QT 图片旋转函数 QPainter::rotate() -- 以图片中心为旋转点,不能随意设置旋转点

    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing);

    QPoint center(this->rect().center());
    painter.translate(center);  //让图片的中心作为旋转的中心
    painter.rotate(-m_angle);   //顺时针旋转 -m_angle 度
    painter.translate(-center); //使原点复原

8.2 QT 控件导出为图片

1、 QWidget

QPixmap QWidget::grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)))


2、QPixmap

QPixmap pixmap = QPixmap::grabWidget(ui->tableWidget);
pixmap.save("D://123.png");

 

 

9. QT对数字自动补0

QString str = QString("%1").arg(12, 5, 10, QLatin1Char('0'));

// 结果: 00012
// 说明: 将数字 12 转成 10 进制的 5 位字符串,在前面自动补 0

10. 鼠标悬停在某窗口上,改变鼠标图片

QPushButton * m_btnMove = new QPushButton(); 
m_btnMove->setCursor(QCursor(Qt::SizeAllCursor));
// setCursor() 表示鼠标在窗体 m_btnMove 上时,改变鼠标图片

11. 让Qt的窗口最小化最大化及关闭按钮都消失 ( &~ 与 | )


// Qt::WindowCloseButtonHint其实是一个值 0x00080000
// 这里的“&~”是取反以后再按位与的意思,下面的“|”是按位或的意思。

// 可以使不想要的按钮消失掉,但是frame的框框还存在。
setWindowFlags(windowFlags()&~ Qt::WindowMinMaxButtonsHint);
setWindowFlags(windowFlags()&~ Qt::WindowCloseButtonHint);   

// 但是如果都不想要的时候,一起使用的时候就无效了。
setWindowFlags(windowFlags()&~ (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint));

// 但如果固定窗口的大小,那么这个全部都屏蔽掉的方案就成功了。
setFixedSize(679, 423);
setWindowFlags(windowFlags()&~ (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint))

12. QSettings

12.1 字符串的序列化

字符串序列化

  • 主要是对字符的Escape,比如'\0','\a'等控制字符,变成"\\0", "\\a"等
  • 其他控制字符,"\\x.."
  • 大于 7F 的字符,如有codec,则使用codec,如无,则用"\\x...."
  • 字符串内包含 ';'   ','   '='  时,字符串两段加引号
  • 字符'\0', "\x.."之后如果是数字(0-9a-fA-F),要继续如此处理

12.2 QSettings读取带英文逗号的文本为空

QSettings::value读取本地 ini 文档的值,有一项值是用于存储类似123,456,144,55,555 的值,但有英文逗号的话读出就是空

QSettings qSettings("user_config.ini",QSettings::IniFormat);
qSettings.setIniCodec("utf-8");	

ui.editCode->setText(qSettings.value("all_setting/c_code").toString().trimmed());

后来才知道可以用 toStringList 直接存到 QStringList 里面

QStringList listSubCti = qSettings.value("hg_config/hadSubAccounts").toStringList();//324,327 逗号分隔

13. QT 进程睡眠一段时间,其他 信号/槽 继续执行

QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents, 100);
QThread::msleep(100);

14. 如何 死等 某异步函数执行完毕后,再执行其他函数 - QEventLoop::exec

QNetworkAccessManager *manager = new QNetworkAccessManager;
QNetworkReply *reply;
QNetworkRequest httpRequest = QNetworkRequest(QUrl(urlHW));
httpRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream");

reply = manager->post(httpRequest, dateHW.toLatin1());

QEventLoop loop;
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
loop.exec();

if (reply->error() == QNetworkReply::NoError)
{
    QString resultMsg = reply->readAll();

}
else
{
    qDebug() << "post file error " << reply->error() << reply->errorString();
}

reply->deleteLater();
delete manager;

15.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt是一款流行的跨平台开发框架,可以用于开发各种类型的应用程序,包括智能家居系统。Qt提供了丰富的图形界面和应用程序逻辑开发工具,使得开发者可以轻松地创建用户友好的智能家居应用。以下是Qt作为简易智能家居框架的几个特: 1. 跨平台性:Qt支持多种操作系统,如Windows、Linux和macOS,可以在不同的设备上运行,比如台式电脑、智能手机和平板电脑。这意味着开发者可以使用同一套代码来实现智能家居应用的跨平台兼容性,减少开发工作量。 2. 图形界面设计:Qt提供了丰富的图形界面设计工具,开发者可以使用Qt的可视化编辑器来创建用户友好的界面。智能家居系统通常需要一个易于操作的界面来控制家里的各种设备,Qt的图形界面设计工具可以帮助开发者轻松创建这样的界面。 3. 功能丰富的库:Qt提供了许多现成的功能库,如网络通信、数据库访问、多媒体处理等。这些功能库可以帮助开发者快速构建智能家居系统的各个模块,如设备控制、场景切换和数据存储。 4. 强大的事件处理机制:智能家居系统需要对各种事件进行处理,如用户的击、设备的状态变化等。Qt提供了灵活的事件处理机制,可以方便地响应和处理这些事件,使得智能家居系统更加智能和灵活。 总之,Qt作为简易智能家居框架,具有跨平台性、图形界面设计、功能丰富的库和强大的事件处理机制等优势,可以帮助开发者快速创建用户友好、功能强大的智能家居应用程序。 ### 回答2: Qt是一种流行的跨平台开发框架,它为开发人员提供了丰富的工具和功能,使他们能够创建各种各样的应用程序。在智能家居领域,Qt可以作为一种简易的框架来构建智能家居解决方案。 首先,Qt具有跨平台的特性,这意味着开发人员可以使用同一套代码在不同的操作系统上运行其应用程序。这对于智能家居系统非常重要,因为它们通常需要在多个设备和平台上运行。使用Qt,开发人员可以轻松地开发一次,并在不同平台上部署他们的应用程序。 其次,Qt提供了易于使用的图形用户界面(GUI)工具,使开发人员能够快速创建各种控件和界面元素。在智能家居系统中,有许多不同的设备和传感器需要进行交互和控制。Qt的GUI工具可以帮助开发人员创建直观和易于使用的用户界面,使用户可以轻松地管理和控制智能设备。 此外,Qt还提供了丰富的网络功能,使开发人员能够建立连接和通信。在智能家居系统中,各种设备和传感器需要相互通信,以实现自动化和远程控制。Qt的网络功能可以帮助开发人员轻松地建立设备之间的连接,实现数据传输和控制命令的发送。 最后,Qt还提供了强大的多媒体功能,可以用于处理音频和视频数据。在智能家居系统中,多媒体功能可以用于实现音乐播放、视频监控等功能Qt的多媒体功能可以帮助开发人员轻松地处理和管理多媒体数据,为用户提供更好的体验。 综上所述,Qt作为一种简易的智能家居框架,具有跨平台能力、易用的GUI工具、丰富的网络功能和强大的多媒体功能。开发人员可以使用Qt来快速构建智能家居系统,并为用户提供更好的体验。 ### 回答3: Qt是一种跨平台的应用程序开发框架,简易智能家居框架指的是利用Qt开发的一种简单且智能的家居控制系统。这个框架可以让用户通过使用智能设备或者手机等终端设备来控制家中的各种设备,实现智能化的生活。 首先,这个框架可以提供一个直观易用的用户界面,让用户可以通过简单的操作就能控制家中各种设备。用户可以通过界面来控制灯光、温度、音乐、电视等各种家居设备的开关、亮度、颜色等参数。用户可以根据自己的需求自由定制界面的布局和样式,使其更符合个人喜好。 其次,这个框架可以实现智能化的控制逻辑。通过与传感器和执行器的连接,框架可以获取环境信息,例如温度、湿度、光线强度等,并根据用户的设定来智能地调节相应的家居设备。比如,可以设置在特定的时间或者特定的天气条件下自动开关灯光,或者根据家庭成员的习惯自动调整空调的温度,提高生活的舒适性。 另外,这个框架还可以实现设备之间的互联互通。通过适配不同的通信协议,比如Wi-Fi、蓝牙、红外等,框架可以将不同品牌、不同类型的智能设备连接在一起,并进行数据交换和联动控制。用户可以通过一个终端设备同时控制多个智能设备,实现一键控制多个设备的功能。 最后,这个框架还可以提供数据统计和分析的功能。框架可以记录各种设备的使用情况,并通过数据分析来提供用户的使用习惯和偏好,以及家居设备的能耗情况等信息,帮助用户优化家居设备的使用,节省能源和成本。 总之,Qt简易智能家居框架提供了丰富的功能和智能化的操作,使用户可以更加方便地控制家中的设备,提高生活的舒适度和便捷性。它不仅满足用户对智能家居的需求,还可以帮助用户节约能源和成本,是一种十分实用的智能家居解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值