QLineEdit 中QPushButton输入问题

一世豁然 2015-10-22 03:27:45


如图为一个网络地址输入器,我要用一个QPushButton对应对于多个QLineEdit,也是说我选择那个QLineEdit,
那个QLineEdit就可以输入,而不管输入什么数字(QPushButton)。
这里我想请教的是怎么才能“选择那个QLineEdit才可以输入?”,说到底我是需要一个判断条件来盘点QPushButton
是否已经被“选择或激活”,我试过qtcreator提示的大多数选择,都失败了。
请问这个条件是什么?或者说是哪个函数?
...全文
463 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
walry_dudu 2015-10-28
  • 打赏
  • 举报
回复
引用 13 楼 shihoongbo 的回复:
[quote=引用 10 楼 walry_dudu 的回复:] [quote=引用 9 楼 shihoongbo 的回复:] [quote=引用 7 楼 Explorer_day 的回复:] [quote=引用 4 楼 shihoongbo 的回复:] 你可以设置所有的按钮属性为始终不获得焦点QPushButton::focusPolicy设置成NoFocus 然后点击之后,向当前占有焦点的QLineEdit发送数据即可
也就是说没有了文本光标一隐一现的效果了?这功能达到了,但效果不一样呀![/quote] 我是说把按钮设置成noFocus,怎么可能输入框没有光标[/quote] 试了一下,运行之后出现 程序异常结束。 QPushButton *mpt=qobject_cast<QPushButton*>(sender()); QLineEdit *currentLine=dynamic_cast<QLineEdit*>(QApplication::focusWidget()); ui->button_1->setFocusPolicy(Qt::NoFocus); ui->button_2->setFocusPolicy(Qt::NoFocus); ui->button_3->setFocusPolicy(Qt::NoFocus); if(mpt==ui->button_1) { currentLine->text().append("1"); }else if(mpt==ui->button_2) { currentLine->text().append("2"); } else if(mpt==ui->button_3) { currentLine->text().append("3"); } 原因出在哪里了?[/quote] 看错你的意思了,你可以这么处理 给每个按钮设定一个唯一的Property属性(比如int型,值为X),然后设定所有的按钮NoFocus,最后把所有的按钮指针存储在一个顺序表QVector里 循环connect,都连接到一个槽里 然后槽里,直接去获取属性值,然后就知道点击的是哪个按钮[/quote] 我再试试
未狂 2015-10-26
  • 打赏
  • 举报
回复
引用 10 楼 walry_dudu 的回复:
[quote=引用 9 楼 shihoongbo 的回复:] [quote=引用 7 楼 Explorer_day 的回复:] [quote=引用 4 楼 shihoongbo 的回复:] 你可以设置所有的按钮属性为始终不获得焦点QPushButton::focusPolicy设置成NoFocus 然后点击之后,向当前占有焦点的QLineEdit发送数据即可
也就是说没有了文本光标一隐一现的效果了?这功能达到了,但效果不一样呀![/quote] 我是说把按钮设置成noFocus,怎么可能输入框没有光标[/quote] 试了一下,运行之后出现 程序异常结束。 QPushButton *mpt=qobject_cast<QPushButton*>(sender()); QLineEdit *currentLine=dynamic_cast<QLineEdit*>(QApplication::focusWidget()); ui->button_1->setFocusPolicy(Qt::NoFocus); ui->button_2->setFocusPolicy(Qt::NoFocus); ui->button_3->setFocusPolicy(Qt::NoFocus); if(mpt==ui->button_1) { currentLine->text().append("1"); }else if(mpt==ui->button_2) { currentLine->text().append("2"); } else if(mpt==ui->button_3) { currentLine->text().append("3"); } 原因出在哪里了?[/quote] 看错你的意思了,你可以这么处理 给每个按钮设定一个唯一的Property属性(比如int型,值为X),然后设定所有的按钮NoFocus,最后把所有的按钮指针存储在一个顺序表QVector里 循环connect,都连接到一个槽里 然后槽里,直接去获取属性值,然后就知道点击的是哪个按钮
冷静忍耐 2015-10-26
  • 打赏
  • 举报
回复
例如你重写QLineEdit的focusEvent事件,当一个QLineEdit获得焦点响应事件时,你就发消息出去,然后在槽里记录这个QLineEdit 就是这个QLineEdit *focusEdit = 发消息的QLineEdit 然后点击Button,响应: focusEdit->setFocus(); focusEdit->text().append("1"); 你10楼的代码,在设置完text后再加一个currentLine->setFocus();或许就可以了。
void_main_void 2015-10-26
  • 打赏
  • 举报
回复
可以尝试新建立一个类 QEdit : publie QLineEdit { QEdit(int nInedx = 0); QLineEdit* m_Edit int m_Inedx; private stols: 当光标在这里产生时的槽 槽类写函数发射 emit m_Inedx; 给主窗口 } 然后在建立一个数组Cedit[XXX] 主窗口按钮的时候每次够通过 QEdit【Inedx】。gettext() + QPushStr 来设置
一世豁然 2015-10-26
  • 打赏
  • 举报
回复
引用 3 楼 u013466477 的回复:
[quote=引用 2 楼 Explorer_day 的回复:] [quote=引用 1 楼 wsxm_wps 的回复:] QLineEdit* currentLineEdit = dynamic_cast<QLineEdit*>(QApplication::focusWidget()); 通过以上可以获取当前你的QLineEdit窗口焦点,操作currentLineEdit就可以进行编辑功能。
构建没有问题,但是一点击QPushButton按钮程序就奔溃了,提示“程序遗产终止”。[/quote] 你要判断这个currentLineEdit存不存在啊,因为你点击QPushButton后,焦点就不再Edit上了而在你的Button上。 除非你记录编辑的Edit,然后点击Button设置记录的Edit,并且Edit->setfocus();[/quote] 谢谢!!根据你的提示思考之后解决了。
一世豁然 2015-10-26
  • 打赏
  • 举报
回复
引用 10 楼 walry_dudu 的回复:
[quote=引用 9 楼 shihoongbo 的回复:] [quote=引用 7 楼 Explorer_day 的回复:] [quote=引用 4 楼 shihoongbo 的回复:] 你可以设置所有的按钮属性为始终不获得焦点QPushButton::focusPolicy设置成NoFocus 然后点击之后,向当前占有焦点的QLineEdit发送数据即可
也就是说没有了文本光标一隐一现的效果了?这功能达到了,但效果不一样呀![/quote] 我是说把按钮设置成noFocus,怎么可能输入框没有光标[/quote] 试了一下,运行之后出现 程序异常结束。 QPushButton *mpt=qobject_cast<QPushButton*>(sender()); QLineEdit *currentLine=dynamic_cast<QLineEdit*>(QApplication::focusWidget()); ui->button_1->setFocusPolicy(Qt::NoFocus); ui->button_2->setFocusPolicy(Qt::NoFocus); ui->button_3->setFocusPolicy(Qt::NoFocus); if(mpt==ui->button_1) { currentLine->text().append("1"); }else if(mpt==ui->button_2) { currentLine->text().append("2"); } else if(mpt==ui->button_3) { currentLine->text().append("3"); } 原因出在哪里了?[/quote] 把设置每个pushbutton的Qt::NoF0cus的代码都放在构造函数中,在设置 currentLine后面加上这一句:currentLine->setFocus()。
一世豁然 2015-10-24
  • 打赏
  • 举报
回复
引用 8 楼 u013466477 的回复:
[quote=引用 6 楼 Explorer_day 的回复:] [quote=引用 3 楼 u013466477 的回复:] [quote=引用 2 楼 Explorer_day 的回复:] [quote=引用 1 楼 wsxm_wps 的回复:] QLineEdit* currentLineEdit = dynamic_cast<QLineEdit*>(QApplication::focusWidget()); 通过以上可以获取当前你的QLineEdit窗口焦点,操作currentLineEdit就可以进行编辑功能。
构建没有问题,但是一点击QPushButton按钮程序就奔溃了,提示“程序遗产终止”。[/quote] 你要判断这个currentLineEdit存不存在啊,因为你点击QPushButton后,焦点就不再Edit上了而在你的Button上。 除非你记录编辑的Edit,然后点击Button设置记录的Edit,并且Edit->setfocus();[/quote] 记录lineEdit应该是记录其焦点吧!(如果是内容的话,要pushButton才有),我的思路是QT中有没有一个函数或标志来判断QLineEdit是否有焦点?或者自己写一个?[/quote] 判断是否有焦点:bool hasFocus(); 我说的就是记录有焦点的lineEdit这个控件啊,QLineEdit *focusEdit = 有焦点的edit; 然后点击Button则设置focusEdit的text,并且focusEdit->setfocus(); 这样文本光标也会闪烁。 重写一下QLineEdit 的focusEvent吧,然后鼠标点击一个edit,就知道是哪一个有焦点了。 [/quote] 刚学QT的菜鸟表示QLineEdit *focusEdit = 有焦点的edit不能理解诶。 焦点还能作为QLineEdit类的值吗? 能不能弄一个例子看看?
未狂 2015-10-23
  • 打赏
  • 举报
回复
你可以设置所有的按钮属性为始终不获得焦点QPushButton::focusPolicy设置成NoFocus 然后点击之后,向当前占有焦点的QLineEdit发送数据即可
walry_dudu 2015-10-23
  • 打赏
  • 举报
回复
引用 9 楼 shihoongbo 的回复:
[quote=引用 7 楼 Explorer_day 的回复:] [quote=引用 4 楼 shihoongbo 的回复:] 你可以设置所有的按钮属性为始终不获得焦点QPushButton::focusPolicy设置成NoFocus 然后点击之后,向当前占有焦点的QLineEdit发送数据即可
也就是说没有了文本光标一隐一现的效果了?这功能达到了,但效果不一样呀![/quote] 我是说把按钮设置成noFocus,怎么可能输入框没有光标[/quote] 试了一下,运行之后出现 程序异常结束。 QPushButton *mpt=qobject_cast<QPushButton*>(sender()); QLineEdit *currentLine=dynamic_cast<QLineEdit*>(QApplication::focusWidget()); ui->button_1->setFocusPolicy(Qt::NoFocus); ui->button_2->setFocusPolicy(Qt::NoFocus); ui->button_3->setFocusPolicy(Qt::NoFocus); if(mpt==ui->button_1) { currentLine->text().append("1"); }else if(mpt==ui->button_2) { currentLine->text().append("2"); } else if(mpt==ui->button_3) { currentLine->text().append("3"); } 原因出在哪里了?
未狂 2015-10-23
  • 打赏
  • 举报
回复
引用 7 楼 Explorer_day 的回复:
[quote=引用 4 楼 shihoongbo 的回复:] 你可以设置所有的按钮属性为始终不获得焦点QPushButton::focusPolicy设置成NoFocus 然后点击之后,向当前占有焦点的QLineEdit发送数据即可
也就是说没有了文本光标一隐一现的效果了?这功能达到了,但效果不一样呀![/quote] 我是说把按钮设置成noFocus,怎么可能输入框没有光标
冷静忍耐 2015-10-23
  • 打赏
  • 举报
回复
引用 6 楼 Explorer_day 的回复:
[quote=引用 3 楼 u013466477 的回复:] [quote=引用 2 楼 Explorer_day 的回复:] [quote=引用 1 楼 wsxm_wps 的回复:] QLineEdit* currentLineEdit = dynamic_cast<QLineEdit*>(QApplication::focusWidget()); 通过以上可以获取当前你的QLineEdit窗口焦点,操作currentLineEdit就可以进行编辑功能。
构建没有问题,但是一点击QPushButton按钮程序就奔溃了,提示“程序遗产终止”。[/quote] 你要判断这个currentLineEdit存不存在啊,因为你点击QPushButton后,焦点就不再Edit上了而在你的Button上。 除非你记录编辑的Edit,然后点击Button设置记录的Edit,并且Edit->setfocus();[/quote] 记录lineEdit应该是记录其焦点吧!(如果是内容的话,要pushButton才有),我的思路是QT中有没有一个函数或标志来判断QLineEdit是否有焦点?或者自己写一个?[/quote] 判断是否有焦点:bool hasFocus(); 我说的就是记录有焦点的lineEdit这个控件啊,QLineEdit *focusEdit = 有焦点的edit; 然后点击Button则设置focusEdit的text,并且focusEdit->setfocus(); 这样文本光标也会闪烁。 重写一下QLineEdit 的focusEvent吧,然后鼠标点击一个edit,就知道是哪一个有焦点了。
一世豁然 2015-10-23
  • 打赏
  • 举报
回复
引用 4 楼 shihoongbo 的回复:
你可以设置所有的按钮属性为始终不获得焦点QPushButton::focusPolicy设置成NoFocus 然后点击之后,向当前占有焦点的QLineEdit发送数据即可
也就是说没有了文本光标一隐一现的效果了?这功能达到了,但效果不一样呀!
一世豁然 2015-10-23
  • 打赏
  • 举报
回复
引用 3 楼 u013466477 的回复:
[quote=引用 2 楼 Explorer_day 的回复:] [quote=引用 1 楼 wsxm_wps 的回复:] QLineEdit* currentLineEdit = dynamic_cast<QLineEdit*>(QApplication::focusWidget()); 通过以上可以获取当前你的QLineEdit窗口焦点,操作currentLineEdit就可以进行编辑功能。
构建没有问题,但是一点击QPushButton按钮程序就奔溃了,提示“程序遗产终止”。[/quote] 你要判断这个currentLineEdit存不存在啊,因为你点击QPushButton后,焦点就不再Edit上了而在你的Button上。 除非你记录编辑的Edit,然后点击Button设置记录的Edit,并且Edit->setfocus();[/quote] 记录lineEdit应该是记录其焦点吧!(如果是内容的话,要pushButton才有),我的思路是QT中有没有一个函数或标志来判断QLineEdit是否有焦点?或者自己写一个?
一世豁然 2015-10-23
  • 打赏
  • 举报
回复
你要判断这个currentLineEdit存不存在啊,因为你点击QPushButton后,焦点就不再Edit上了而在你的Button上。 除非你记录编辑的Edit,然后点击Button设置记录的Edit,并且Edit->setfocus();[/quote] 记录lineEdit应该是记录其焦点吧!(如果是内容的话,要pushButton才有),我的思路是QT中有没有一个函数或标志来判断QLineEdit是否有焦点?或者自己写一个?
冷静忍耐 2015-10-22
  • 打赏
  • 举报
回复
引用 2 楼 Explorer_day 的回复:
[quote=引用 1 楼 wsxm_wps 的回复:] QLineEdit* currentLineEdit = dynamic_cast<QLineEdit*>(QApplication::focusWidget()); 通过以上可以获取当前你的QLineEdit窗口焦点,操作currentLineEdit就可以进行编辑功能。
构建没有问题,但是一点击QPushButton按钮程序就奔溃了,提示“程序遗产终止”。[/quote] 你要判断这个currentLineEdit存不存在啊,因为你点击QPushButton后,焦点就不再Edit上了而在你的Button上。 除非你记录编辑的Edit,然后点击Button设置记录的Edit,并且Edit->setfocus();
一世豁然 2015-10-22
  • 打赏
  • 举报
回复
引用 1 楼 wsxm_wps 的回复:
QLineEdit* currentLineEdit = dynamic_cast<QLineEdit*>(QApplication::focusWidget()); 通过以上可以获取当前你的QLineEdit窗口焦点,操作currentLineEdit就可以进行编辑功能。
构建没有问题,但是一点击QPushButton按钮程序就奔溃了,提示“程序遗产终止”。
wsxm_wps 2015-10-22
  • 打赏
  • 举报
回复
QLineEdit* currentLineEdit = dynamic_cast<QLineEdit*>(QApplication::focusWidget()); 通过以上可以获取当前你的QLineEdit窗口焦点,操作currentLineEdit就可以进行编辑功能。

16,815

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧