QT QFrame 占位添加 widget

需求 qt QFrame 有什么作用? 解决 占位 可以由 UI 工程师先使用 QFrame 占位,固定好整体布局,后续的实际的 widget 添加到 QFrame 中即可。 添加 widget QFrame 占位之后,还是需要使用 layout 来管理需要添加进去的 widget, 如果不用 layout, 可能会发生 widget 都在 (0, 0) 处,并且 resize 窗口之后,可能不会自动调整内部 widget. chartView = new ChartBriefView(createScatterChart()); auto layout = new QVBoxLayout(); layout->addWidget(chartView); ui->frame->setLayout(layout); 参考 QtDesigner+QWidget占位设计 QT的布局关键之一QFrame Adding a widget to a QFrame 第二十九章、containers容器类部件QFrame框架部件详解

<span title='2023-07-05 17:16:00 +0800 CST'>2023-07-05</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;54 words&nbsp;·&nbsp;RamLife

QT QGroupbox 边框设置

需求 qt QGroupBox 自带的边框颜色非常淡,和 QFrame 的 frameShape 中的 Box 颜色相差太大了。希望修改边框,能够整体契合一些。 解决 QGroupBox 没有 frameShape, 只能通过 styleSheet 的配置来达到效果。在 designer 中如下设置 stypeSheet 即可和 QFrame 合拍。 QGroupBox{ border-width:1px; border-style:solid; border-color:gray; margin-top:0.5ex; } 如果还想要圆角矩形之类的,那么需要这样设置: QGroupBox{ border-width:2px; border-style:solid; border-radius: 10px; border-color:gray; margin-top:0.5ex; } 当然也可以在代码中使用如下的格式来进行配置: ui->groupBox->setStyleSheet("background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #E0E0E0, stop: 1 #FFFFFF);" " border-radius: 5px; margin-top: 1ex; ");//border: 2px solid gray; 参考 QGroupBox 显示边框 圆角边框 linux环境 QGroupBox设置边框

<span title='2023-07-05 15:22:00 +0800 CST'>2023-07-05</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;69 words&nbsp;·&nbsp;RamLife

QT QFrame 边框设置

需求 qt QFrame 需要能够边框明显一些,方便各个区域能够对比明显。 解决 在 designer 中,设置 QFrame 的 frameShape 从默认的 StylePanel 改为 Box, 就可以非常明显的看出来边框了,如果还需要进一步设置阴影,那么可以设置 frameShadow 为 Sunken, lineWidth 为 5, midLineWidth 为 10. 参考 《Qt Creator 快速入门 第二版》 P63

<span title='2023-07-05 14:22:00 +0800 CST'>2023-07-05</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;31 words&nbsp;·&nbsp;RamLife

QT QChartView 点击跳转详细大图

需求 qt 需要在 QChartView 被点击时,跳转详情页面。 解决 其实也简单,只需要 override mousePressEvent 即可。 新建一个类 public 继承 QChartView 在这个类里面重写 mousePressEvent, 每当按下的时候发出 Press 的信号 在前一个页面的代码中绑定 Press 这个信号和详情的页面。 这样就可以在点击图表的时候,发出信号,触发详情页面的打开。 #ifndef CHARTBRIEFVIEW_H #define CHARTBRIEFVIEW_H #include <QWidget> #include <QtCharts/QChartGlobal> #include <QtCharts/QChartView> QT_CHARTS_BEGIN_NAMESPACE class QChartView; class QChart; QT_CHARTS_END_NAMESPACE QT_CHARTS_USE_NAMESPACE class ChartBriefView : public QChartView { Q_OBJECT public: ChartBriefView(QChart *chart, QWidget *parent = nullptr); signals: void Press(int id); private: void mousePressEvent(QMouseEvent *event) override; }; #endif // CHARTBRIEFVIEW_H #include "chart_brief_view.h" #include <QDebug> ChartBriefView::ChartBriefView(QChart *chart, QWidget *parent) : QChartView(chart, parent) { } void ChartBriefView::mousePressEvent(QMouseEvent *event) { qDebug() << "chart view press" << Qt::endl; emit Press(0); } connect(chartView, &ChartBriefView::Press, this, &ControllerForm::ClickSensor); 参考 QtCharts图形移动和缩放...

<span title='2023-07-05 11:43:00 +0800 CST'>2023-07-05</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;104 words&nbsp;·&nbsp;RamLife

QT 进度条 介绍

需求 最近想了解下 进度条。 解决 QT–进度条 参考

<span title='2023-07-05 10:02:00 +0800 CST'>2023-07-05</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;6 words&nbsp;·&nbsp;RamLife

QT dialog 关闭时释放资源

需求 需要在 QDialog 关闭的时候,自动释放掉资源。 解决 默认情况下, QDialog 占用的内存会在 MainWindow 关闭后释放,如果想要在 QDialog 本身关闭的时候就释放,需要通过 setAttribute 方法配置 Qt::WA_DeleteOnClose 选项. CurrentGetConfigForm * current_get_config_form = nullptr; void MainWindow::on_pushButton_current_get_config_clicked() { if (!GetConfig()) return; if (current_get_config_form == nullptr) current_get_config_form = new CurrentGetConfigForm(nullptr, port_, version_, address_); current_get_config_form->setAttribute(Qt::WA_ShowModal, true); current_get_config_form->setAttribute(Qt::WA_DeleteOnClose, true); current_get_config_form->show(); //QEventLoop loop; //loop.exec(); qDebug() << "MainWindow::on_pushButton_current_get_config_clicked() end" << Qt::endl; current_get_config_form = nullptr; } 参考 Qt Dialog 内存管理问题:Dialog关闭时会自己释放自己吗?

<span title='2023-05-25 21:18:00 +0800 CST'>2023-05-25</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;60 words&nbsp;·&nbsp;RamLife

QT widget 以阻塞的模态形式打开

需求 需要把 widget 以模态形式打开,组织用户操作前一个页面。 解决 QWidget 没有 exec 这个方法,只能转化为 QDialog 之后,再使用 exec 方法。 CurrentGetConfigForm * current_get_config_form = nullptr; void MainWindow::on_pushButton_current_get_config_clicked() { if (!GetConfig()) return; if (current_get_config_form == nullptr) current_get_config_form = new CurrentGetConfigForm(nullptr, port_, version_, address_); current_get_config_form->setAttribute(Qt::WA_ShowModal, true); current_get_config_form->setAttribute(Qt::WA_DeleteOnClose, true); current_get_config_form->show(); //QEventLoop loop; //loop.exec(); qDebug() << "MainWindow::on_pushButton_current_get_config_clicked() end" << Qt::endl; current_get_config_form = nullptr; } 参考 QWidget如何exec QT 创建新窗口并且实现页面跳转 qt 增加新窗口,并显示在最前

<span title='2023-05-25 21:18:00 +0800 CST'>2023-05-25</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;59 words&nbsp;·&nbsp;RamLife

QT Text 相关 widget 追加文本不换行

需求 正常在 QTextEdit QTextBrowser 中使用 append 添加新内容,都是自动换行的,如果不希望自动换行怎么办? 解决 其实很简单,使用 insertPlainText 这个方法即可。 textBrowser->insertPlainText("hello "); textBrowser->insertPlainText("world"); insertPlainText接口是在当前光标插入文本(光标一般默认在末尾),不自动换行,所以会打印: hello world 参考 QTextEdit QTextBrowser追加文本不换行

<span title='2023-03-10 16:00:00 +0800 CST'>2023-03-10</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;20 words&nbsp;·&nbsp;RamLife