QT qintptr 介绍

需求 qintptr ? 解决 这个是 qt 为了跨平台用的,特别是有些情况,硬件平台可能是 32bit 或者 64bit。 qintptr 表示指针类型,占用空间和 int 一样,依赖于硬件实现, 32bit 平台那就是 32bit, 64bit 平台那就是 64bit。这样在用户代码层面便于统一。 qintptr 和 quintptr 都是指针,只不过一个是 有符号数,一个是无符号数。 qintptr 这个有符号的类型对于 hasing 等情况比较方便。 参考 <Qt help> -> <QtGlobal>::qintptr

2023-07-22 · 1 min · 34 words · RamLife

QT 使用基于 libev 的事件调度器 qt_eventdispatcher_libev

需求 qt 使用高性能事件调度器 解决 可以使用基于 libev 的事件调度器 qt_eventdispatcher_libev 安装 qt_eventdispatcher_libev 在源码目录中新建 eventdispatcher_libev 目录,增加 pri 文件。 复制 https://github.com/sjinks/qt_eventdispatcher_libev 的 src 目录中的文件,删除 win32 等无关文件。 在 pro 文件中,添加 pri 文件 编译看是否有错误。 使用 qt_eventdispatcher_libev main.cpp 中添加头文件 #include "eventdispatcher_libev/eventdispatcher_libev.h" 在 main() 最开始的地方添加 QCoreApplication::setEventDispatcher(new EventDispatcherLibEv()); int main(int argc, char *argv[]) { QCoreApplication::setEventDispatcher(new EventDispatcherLibEv()); QCoreApplication a(argc, argv); return a.exec(); } *注: qt help 中说明 QCoreApplication::setEventDispatcher 使用的地方 That is, before QCoreApplication has been instantiated. * 参考 基于 libev 的 Qt 事件调度器:qt_eventdispatcher_libev...

2023-07-22 · 1 min · 77 words · RamLife

QT 按钮关闭窗口

需求 qt 按钮关闭窗口调用什么 api ? 解决 一般可以调用 hide(), setVisible(false), close() 这些来关闭窗口。 hide() 基本等效于 setVisible(false) close() 是通过 QCloseEvent 来隐藏窗口。只有开启了 Qt::WA_DeleteOnClose 这个属性,才会真正的删除。 参考 QT界面窗口的显示和隐藏,关闭

2023-07-17 · 1 min · 22 words · RamLife

QT RadioButton 分组

需求 qt QRadioButton 如何分组? 解决 QRadioButton 分组有多种方法: QGroupBox 这样的组合框 QWidget QButtonGroup 参考 Qt的Radio Button(单选按钮) QT QRadioButton使用详解

2023-07-06 · 1 min · 16 words · RamLife

QT QLineEdit 添加 label,清除按钮

需求 qt QLineEdit 很多时候需要在前面加上一个标签,后面加上一个清除按钮。 解决 清除按钮 高版本 qt 自身就支持清除按钮,可以在 designer 中,勾选 clearButtonEnabled 属性. 添加 label 这个自有自定义一个 LineEdit 才行了,可以继承 QLineEdit, 然后设置 LineEdit 的布局为横向布局,然后把 QLabel 添加进来即可。 在 designer 中使用的时候,可以先放一个 QLineEdit, 然后提升为自定义的 LineEdit 即可。 参考 三种方法为QLineEdit添加清除内容按钮 C++ Qt自定义控件QLineEdit,简单 Qt之自定义用户名输入框 QLineEdit+QLabel+QComboBox 带输入自动提示补全和历史登录用户记忆 Qt之自定义搜索框——QLineEdit里增加一个Layout,还不影响正常输入文字(好像是一种比较通吃的方法) 【Qt】常用控件(QLabel,QLineEdit以及自定义控件)

2023-07-05 · 1 min · 40 words · RamLife

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框架部件详解

2023-07-05 · 1 min · 54 words · 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设置边框

2023-07-05 · 1 min · 69 words · RamLife

QT QFrame 边框设置

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

2023-07-05 · 1 min · 31 words · 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图形移动和缩放...

2023-07-05 · 1 min · 104 words · RamLife

QT connect signal 和 slot 类型匹配

需求 qt 在使用 connect 连接时,有些时候因为类型匹配的问题,会报错: QPushButton * controller_button_[APP_NUM_OF_CONTROLLER]; QSignalMapper * signalMapper_; signalMapper_ = new QSignalMapper(this); for (int i = 0; i < APP_NUM_OF_CONTROLLER; i++) { controller_button_[i] = new QPushButton(this); connect(controller_button_[i], &QPushButton::clicked, signalMapper_, &QSignalMapper::map); signalMapper_->setMapping(controller_button_[i], i); } connect(signalMapper_, &QSignalMapper::mapped, this, &MainWindow::ClickDetail); mainwindow.cpp:173:9: error: no matching member function for call to 'connect' qobject.h:222:36: note: candidate function not viable: no known conversion from 'void (QAbstractButton::*)(bool) __attribute__((thiscall))' to 'const char *' for 2nd argument qobject....

2023-07-05 · 2 min · 278 words · RamLife