QT按钮点击事件(ARM触摸屏)

QT按钮点击事件(ARM触摸屏),第1张

我们最近也是QT的程序在触摸屏ARM版上跑,没有出现你这种问题。

click事件需要按下并且释放两个动作才会触发,按照楼主的描述,就是没有侦测到释放这个动作

我猜测可能的原因有三种:

1、触摸屏损坏,当我们按下的时候,触摸屏侦测到了,释放的时候却没有侦测到

2、触摸屏驱动的原因,释放的时候触摸屏侦测到了,但是触摸屏驱动没有把这个信号传给系统,所以系统也不知道已经释放了

3、软件逻辑的原因(这个可能比较小了),软件监听了按钮按下的信号,当按钮按下时(还没松开)去做某件事,导致主线程阻塞了,

所以按钮暂时没有被主线程释放(置为d出状态)

用代码来描述的话可以是这样的:

QTextCursor cur = edit->textCursor();//返回当前光标对象

cursetPosition(2, QTextCursor::MoveAnchor);//移到起始位置

curmovePosition(QTextCursor::NoMove, QTextCursor::keepAnchor, 3);//移动结束位置

curselect(QTextCursor::WordUnderCursor);//选择

edit->setTextCursor(cur);

这样就选择了位置是2到4三个字符的文本了。

没做过,但是以我的思路大概可以有这个做法,qt在同一个界面 press/click 事件是线性的,也就是一个点一个点来的,所以要判断多点触控建议同时判断 时间和空间

首先两个点的时间间隔必须小于 5ms(QT毫秒级响应会有1-2个ms的误差,开发环境win10/595),然后两个点的距离必须大于多少个像素(这个自己定),这样就可以知道是不是多点触控

void mousePressEvent(QMouseEvent event); 这是鼠标单机事件函数要在h里面声明只要发生鼠标事件都会触发这个函数

void mousePressEvent(QMouseEvent event)

{

    //获得鼠标的x , y 坐标 event->x  , event->y

    //判断点击的是左键还是右键 event->button()==Qt::LeftButton(Qt::RightButton) 

}

再cpp里面实现就好

获取qt窗口外的坐标可以使用

event->globalPos();

event->globalX();

event->globalY();

这三个函数都可以捕抓到整个屏幕的坐标

基本上所有的控件都有显示和隐藏的属性。一开始可以设置控件为隐藏,当点击的时候,设置控件的属性为显示。qtoolbox当然可以实现这个功能,你可以直接将qtoolbox设置为隐藏,这样它里面的元素也是不可见的,然后点击的时候,再将它的属性设置为显示。

当然,qtoolbox是最好的选择,因为它提供一个列的条目,你可以添加item来添加元素,非常方便和索引。

信号槽机制是这样的:connect(XXX,SIGNAL(),this,SLOT(YYY));

帮你实现了你要的功能:(直接划到最底下有完整代码)

1,写在h的内容,有三句话,注意位置

在piblic:添加声明  !!!

QString str;   //声明str,用于接收输入的字符串

在三个权限关键字最后另起一行写 !!!

public slots://这里要回车,字体变**

void on_clicked();//函数名随意,括号不能少,有必要时括号里要写参数   

2,在cpp中调用。

在h把鼠标放在on_clicked()右击,在cpp添加定义(列表第七项下面第二项),系统会自己帮定义,在定义里写需要绑定的事件,比如你这里要将lineEdit中的字符串在TextBrowser中显示。

void MainWindow::on_clicked(){

str = ui->lineEdit->text(); //这句获取输入的信息,一定要写在按钮槽函数里,因为按钮按下之前str存的值为空。这是按钮触发了才把值存到str中,没按之前我们就写了东西,所以按下了str读到的是自己写的内容。写在外面错误的方式就算自己写了内容运行的时候仍然是空,因为这里不是动态获取,自己消化一下

//   ui->textBrowser->clear(); //如果希望每一次按确定后只显示一行就用这条语句,先把原来浏览器的内容清空,再把结果显示出来。

ui->textBrowser->append(str+"\n");//这里写的功能是把str追加到textBrowser中;我这里用换行是把第二次的输入也显示到浏览器中

//     ui->textBrowser->setText(str); //这里也可以用setText方法,效果一样

}

3,在主函数写完整信号槽。

connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_clicked()));  //连接信号槽事件

//格式:connect(发送信号控件,SIGNAL(控件里的一个信号),接收的界面或控件(在同一页面一般是this),SLOT(刚定义的槽函数(函数写实现的功能));

运行效果图:

运行的整体效果

输入第一句话,显示的内容

第二句,回车格式在代码加的

一样的,可以输入任何字符,数字,中文

sentence4

窗口可以拉伸调整的

鼠标放在窗口边沿,窗口可以放大缩小,任意拉伸。qt application默认的。

头文件代码截图

源文件代码截图

ui界面和对象名称

//头文件:太啰嗦了,你自己把啰嗦的删掉吧,我只是怕初学者会理解不到位,故意啰嗦的

class MainWindow : public QMainWindow{

    Q_OBJECT

public:

    explicit MainWindow(QWidget parent = 0);

    ~MainWindow();

    QString str;   //声明str,用于接收输入的字符串

private:

    Ui::MainWindow ui;

public slots:    //这里要回车,字体变**

    void on_clicked();  //函数名随意,括号不能少,有必要时括号里要写参数

};//源文件:

MainWindow::MainWindow(QWidget parent) :    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    ui->lineEdit->setPlaceholderText(QStringLiteral("Please input"));

    

///以下两条语句写的位置不对,可能会得不到期望效果(不信你就解除屏蔽看看效果)///

//    QString str;   //创建字符串,错误,最好在头文件声明

//    str = ui->lineEdit->text();//获取lineEdit的文本内容(最初文本内容为空,程序一运行就把lineEdit的空白存到str了,所有点击按钮发现上面是没有内容的)

    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_clicked()));  //连接信号槽事件

///格式:connect(发送信号控件,SIGNAL(控件里的一个信号),接收的界面或控件(在同一页面一般是this),SLOT(刚定义的槽函数(函数写实现的功能));

}

void MainWindow::on_clicked()

{

     str = ui->lineEdit->text(); //这句获取输入的信息,一定要写在按钮槽函数里,因为按钮按下之前str存的值为空或者未知。

//     ui->textBrowser->clear();  //如果希望每一次按确定后只显示一行就用这条语句,先把原来浏览器的内容清空,再把结果显示出来。

     ui->textBrowser->append(str+"\n");//这里写的功能是把str追加到textBrowser中;我这里用换行是把第二次的输入也显示到浏览器中

//     ui->textBrowser->setText(str); //这里也可以用setText方法,效果一样

}

以上就是关于QT按钮点击事件(ARM触摸屏)全部的内容,包括:QT按钮点击事件(ARM触摸屏)、Qt中关于QTextEdit的问题,如何获取选中其中某个位置数据呢、Qt怎样获取触控屏上的多个触摸点的各个坐标!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9649129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存