我们最近也是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怎样获取触控屏上的多个触摸点的各个坐标!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)