首页 > 系统相关 >QT_linux

QT_linux

时间:2024-02-17 13:11:23浏览次数:42  
标签:QT QPA dev hBoxLayout export linux addWidget

加载本地图片

/* 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函数,每一个动作都有特定的(约定俗成的)处理方法

image-20240125032843574

图,,

image-20240125050715263

image-20240125060526882

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

image-20240126100659124

image-20240126100925257

开机脚本

/etc/init.d/rcS

Qt群里行人稀,常有车手较高低,如今车道依旧在,不见当年老司机。

知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究。

image-20240130011941130

image-20240130012856529

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触摸屏配置

设备信息

image-20240204133422618

配置

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

相关文章

  • 【虚拟机新手起步04】2步完成kali linux安装。
    2步完成kalilinux安装一、选择kali镜像进行安装二、在vmware中打开虚拟机一.选择kali镜像进行安装:https://mirrors.tuna.tsinghua.edu.cn/kali-images/选择对应版本进行安装下载完成之后,解压这个压缩包二.在vmware中打开虚拟机选中虚拟机打开:正常使用END......
  • Linux命令基础,黑马程序员学习笔记
    Linux命令基础命令基础格式command[-options][parameter]command:命令本身-options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节parameter:[可选,非必填]命令的参数,多数用于命令的指向目标等示例:ls-l/home/itheimals是命令本身,-l是选项,/home/itheim......
  • QT打包
    Qt打包程序提示“应用程序无法正常启动(0xc000007b)”/未找到Qt5Core.dll的正确解决方案先打到配置环境变量的页面 ......
  • Qt环境Windows应用程序动态变更系统默认打印机
    有些工作环境安装有多个打印机,针对不同需求进行各种输出。如果是用QPrinter进行打印控制,可以通过setPrinterName确定使用哪一个打印机,但如果程序使用了第三方功能进行打印输出,比如通过QAxObject调用系统的文字处理直接输出,就可能会遇到无法明确指定哪一个打印机的问题。这时就需要......
  • 2024年,我又开始用Linux桌面作为主力系统了~
    前言19年的时候我买了一个matebook14笔记本,配置是8代i5和8G内存,在当时看来作为轻薄本是够用的,但是现在已经2024年了,这内存让我想起来去年苹果的新款macmini,丐版三千多给了8G的配置,数码圈都沸腾了......
  • Qt FluentUI 框架
    QtFluentUI框架项目地址:zhuzichu520/FluentUI(github.com)安装编译直接用QtCreator打开工程,编译运行example即可。根据CMakeLists.txt可以看出,编译好了后会自动在<Qt_SDK_DIR>/<Qt_Version>/<Your_compiler>/qml下面生成FluentUI文件夹,其中存放着FluentUI......
  • Linux 环境下安装并配置 git
    Linux环境下安装并配置git本篇记录笔者配置git的全部流程。笔者使用Win10WSL下的Debian12。安装gitsudoapt-getinstallgit#sudoapt-getinstallgit-all笔者选择了git包,根据Debian网站,二者区别如下:Gitprovidesthegitmaincomponentswithminima......
  • 到什么程度才叫精通 Linux?
    大家好,我是陶朱公Boy,一个认真生活,总想超越自己的程序员。前言知乎上有一个提问:到什么程度才叫精通Linux?               ↓↓↓今天,我们就这个话题一起来做个讨论。我的回答在回答这个问题前,不妨先问大家几个问题:为什么我们需要操作系统?操......
  • Linux终端输入密码显示星号
    LinuxMint系统默认显示星号,这个感觉是非常好的体验,虽然有人觉得不安全,不过无所谓了,好用才是关键这个设置在/etc/sudoers.d/0pwfeedback这里这个文件里面就一行Defaultspwfeedback如果不想显示星号,加个感叹号就行Defaults!pwfeedback参考:https://www.zhihu.com/quest......
  • Android 未root时 文件的selinux权限和日志查看办法
     getenforce 获取当前SELinux状态cas:/$getenforceEnforcingdmesg可以查看日志,但是没有root权限不能用,会显示cas:/$dmesgdmesg:klogctl:Permissiondeniedhttps://android.stackexchange.com/questions/218223/how-to-fix-dmesg-klogctl-permission-denied-for-nor......