加载本地图片
/* QPixmap
类型对象 */
QPixmap image;
/* 加载 */
image.load(":/image/cd.png");
//不缩放
ui->label->setScaledContents(false);
// 图片在标签中居中显示(水平和垂直方向均居中)
ui->label->setAlignment(Qt::AlignCenter);
pixbad2(":/1/bad.png");
pixbad1(":/1/bad2.png");
ui->labelBad->setPixmap(pixbad1);
ui->labelBad->setScaledContents(false);
ui->labelBad->setAlignment(Qt::AlignCenter);
信号和槽
信号可以是一个函数,(感觉经常就是一个函数)
信号只有声明,无执行,可传参给槽
相较于直接在发信号处调用槽,因为connect()的存在,信号和槽的组合更加灵活
如下
public:
WorkerThread(QWidget *parent = nullptr) {
Q_UNUSED(parent);
}
/* 重写run方法,继承QThread的类,只有run方法是在新的线程里 */
void run() override {
QString result = "线程开启成功";
/* 这里写上比较耗时的操作 */
// ...
// 延时2s,把延时2s当作耗时操作
sleep(2);
/* 发送结果准备好的信号 */
//执行
emit resultReady(result);
}
signals:
/* 声明一个信号,译结果准确好的信号 */
//声明
void resultReady(const QString &s);
或者类似返回值的感觉
例如某个操作会触发某个类的某个函数,这个函数(发送返回值??)即可以是信号、
发送信号,emit
关键字
emit resultReady(result);
信号和槽之间还能传递参数,QString
connect(workerThread, SIGNAL(resultReady(QString)),this, SLOT(handleResults(QString)));//信号和槽之间还能传递参数
进程的创建
分两种,一种直接继承 QThread
类编写run()
另一种是继承 QObject
类。继承 QObject
类更加灵活。它通过 QObject::moveToThread()
方法,将一个 QObeject
的类转移到一个线程里执行。仍需要一个QThread
的类管理线程
关于布局
控件加入QHBoxLayout
(水平),控件合集
/* 水平布局一添加内容 */
hBoxLayout[0]->addWidget(pushButton[0]);
hBoxLayout[0]->addWidget(pushButton[1]);
hBoxLayout[0]->addWidget(pushButton[2]);
再将QHBoxLayout
保存在一个窗口hWidget
,控件合集的合集,
hWidget[0]->setLayout(hBoxLayout[0]);
其他示例
/* 水平布局二添加内容 */
hBoxLayout[1]->addWidget(label[0]);
hBoxLayout[1]->addWidget(comboBox);
hBoxLayout[1]->addWidget(label[1]);
hBoxLayout[1]->addWidget(spinBox);
/* 设置水平容器二的布局为水平布局二 */
hWidget[1]->setLayout(hBoxLayout[1]);
可被其他窗口包含,本质上也算是一个大控件
/* 垂直布局添加内容 */
vBoxLayout->addWidget(textBrowser);
vBoxLayout->addWidget(hWidget[1]);
vBoxLayout->addWidget(hWidget[0]);
vBoxLayout->addWidget(hWidget[2]);
vWidget->setLayout(vBoxLayout);
最后设置主显示(窗口):vWidget
/* 居中显示 */
setCentralWidget(vWidget);
TCP通信
复杂,,,,以后复制的函数能用就好了
调用提供的API
函数,每一个动作都有特定的(约定俗成的)处理方法
图,,
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
QT_CREAT后台启动
/opt/Qt5.12.9/Tools/QtCreator/bin/qtcreator.sh &
100ASK_IMX6ULL_PRO
屏幕左上角的光标操作
关闭光标
echo -e "\033[?25l" > /dev/tty1
打开光标
echo -e "\033[?25h" > /dev/tty1
让屏幕不自动熄灭
echo -e "\033[9;0]" > /dev/tty0
去掉Qt界面(米尔HMI界面)
mv /etc/init.d/S99myirhmi ~
去掉lvgl界面
*主要看自己/etc/init.d 下面有哪些文件*
mv /etc/init.d/S05lvg ~
或
mv /etc/init.d/S32lvgl ~
或
mv /etc/init.d/S49lvgl ~
修改打印等级
echo 4 >/proc/sys/kernel/printk
开机脚本
/etc/init.d/rcS
Qt群里行人稀,常有车手较高低,如今车道依旧在,不见当年老司机。
知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究。
QT_部署
/* 获取屏幕的分辨率,Qt官方建议使用这
* 种方法获取屏幕分辨率,防上多屏设备导致对应不上
* 注意,这是获取整个桌面系统的分辨率
*/
QList <QScreen *> list_screen = QGuiApplication::screens();
/* 如果是ARM平台,直接设置大小为屏幕的大小 */
#if __arm__
/* 重设大小 */
this->resize(list_screen.at(0)->geometry().width(),
list_screen.at(0)->geometry().height());
/* 默认是出厂系统的LED心跳的触发方式,想要控制LED,
* 需要改变LED的触发方式,改为none,即无 */
//system("echo none > /sys/class/leds/sys-led/trigger");
#else
/* 否则则设置主窗体大小为800x480 */
this->resize(1024, 600);
#endif
QT触摸屏配置
设备信息
配置
export QT_LOGGING_RULES=qt.qpa.input=true # 打印触屏信息
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event1 # 指定输入设备的名称
export QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event1 # 将触摸屏的点击事件配置成Qt的鼠标点击事件
export QT_QPA_FB_HIDECURSOR=1 # 为1则隐藏鼠标光标,为0则显示鼠标光标
#TSLIB
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
#Qt
export QT_QPA_EGLFS_DISABLE_INPUT=1
export QT_QPA_GENERIC_PLUGINS="tslib:/dev/input/event1"
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/plugins
export QT_QPA_PLATFORM=eglfs
export QML2_IMPORT_PATH=/usr/lib/qml
export QT_QPA_EGLFS_TSLIB=1
GIF动画
QMovie *movie = new QMovie(":/1/shuaidao.gif");
ui->label_5->setMovie(movie);
ui->label_5->setScaledContents(true);
ui->label_5->setAlignment(Qt::AlignCenter);
// GIF 动画执行一次就结束
connect(movie, &QMovie::frameChanged, [=](int frameNumber){
if (frameNumber == movie->frameCount() - 1){movie->stop();}});
movie->start();
标签:QT,QPA,dev,hBoxLayout,export,linux,addWidget
From: https://www.cnblogs.com/HI-T/p/18017897