QLineEdit 中QPushButton输入问题

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


如图为一个网络地址输入器,我要用一个QPushButton对应对于多个QLineEdit,也是说我选择那个QLineEdit,
那个QLineEdit就可以输入,而不管输入什么数字(QPushButton)。
这里我想请教的是怎么才能“选择那个QLineEdit才可以输入?”,说到底我是需要一个判断条件来盘点QPushButton
是否已经被“选择或激活”,我试过qtcreator提示的大多数选择,都失败了。
请问这个条件是什么?或者说是哪个函数?
...全文
445 17 打赏 收藏 转发到动态 举报
写回复
用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就可以进行编辑功能。
第7章 Qt基于Widget的控件 137 7.1 QLabel控件 137 设置QLabel字体的大小和颜色 137 使用QLabel显示图片 138 图片自适应QLabel的大小 138 7.2 QPushButton控件 138 QPushButton的基本应用 139 QPushButton设置图片 140 7.3 QLineEdit控件 141 QLineEdit基本应用 141 QLineEdit限制输入数字 141 setPlaceholderText()设置提示文字 142 setReadOnly设置不可编辑 142 setMaxLength()设置可以输入的最多字符数 142 setEchoMode()设置模式 142 7.4 QTextEdit控件 143 简介 143 提示占位文本 143 文本内容设置 144 7.4 QPlainTextEdit控件 145 QPlainTextEdit简介 145 QPlainTextEdit富文本 145 QPlainTextEdit用法 145 7.5 QSpinBox控件 146 QSpinBox简介 146 QSpinBox的主要属性 147 QSpinBox案例分析 147 7.6 QRadioButton控件 148 简介 148 在UI界面加入QRadioButton控件 148 对QRadioButton控件进行分组 149 多个QRadioButton控件响应同一个槽函数 149 7.7 QCheckBox控件 152 简介 152 QCheckBox开启三态模式 152 在UI界面加入QCheckBox控件 153 stateChanged()信号 153 猜猜你喜欢 154 7.8 QSlider滑动条控件 155 QSlider简介 155 QSlider案例 156 7.9 QComboBox下拉选择框 157 QComboBox简介 157 QComboBox列表项的访问 157 QComboBox的currentlndexChanged信号 157 QComboBox添加图标 159 用代码添加项 159 添加项 159 7.10 列表框QListWidget类 160 QListWidget简介 160 列表项的显示设置 161 列表框常用操作 162 添加操作 162 删除操作 162 7.11 表格控件QTableWidget 163 简介 163 界面设计器编辑 163 代码方式修改QTableWidget 164 7.12 树控件QTreeWidget 167 简介 167 操作步骤与分析 167 7.13 Qt的日期、时间、日历等控件 169 QDateEdit控件 169 QDateTimeEdit控件 169 QCalendarWidget控件 170 7.14 QDialog 171 简介 171 操作 171 QMessageBox 172 QFileDialog 173 QFontDialog 174 QColorDialog 175
课程亮点       本课程是PySide6零基础入门与项目实战视频教程,经过精心设计,分为十个章节,制作了141页ppt, 接近70个代码示例,主要讲解PySide6开发环境安装、基础控件与界面布局、项目实战,PySide6程序打包,安装包制作,安装卸载、更新,发布等知识。涵盖从基础概念到高级应用的全方位知识,旨在为你提供一条清晰、系统的学习之路。无论你是编程新手,还是希望深化对PySide6的了解,本课程都能满足你的需求。       教学环境:Win11 64bit、Python3.11、PyCharm、Anacoda。课程大纲第一章:基础篇 PySide6开发环境安装        从Anaconda环境配置开始,带你快速入门Win11/win10下PySide6、PyQt5开发环境的安装与配置,分别介绍PyCharm与VSCode如何配置PySide6,  以及Python AnaConda的基本用法,创建虚拟环境,安装python模块。第二章 控件与布局篇 PySide6常用控件与界面布局使用介绍        深入PySide6的常用控件与界面布局技巧,通过丰富的实例,掌握PySide6的窗口、布局、控件等核心内容。主要介绍QLabel、QPushButton、QLineEdit、QCheckBox、QComboBox、QTextEdit、QTextBrowser、QListView与QListWidget、QStackedWidget、QTabWidget、QTableView等控件以及水平垂直布局,弹簧控件,栅格布局,表单布局。第三章 信号槽与事件机制       解锁PySide6的信号槽机制和事件处理技能,让你的应用更加灵活。详细介绍Qt自定义信号槽,跨窗口传递信号;Qt鼠标事件,键盘事件,组合事件,事件过滤。第四章 QMainWindow应用篇       详细介绍QMainWindow的使用,包括菜单栏、工具栏、状态栏和停靠窗口等。第五章 样式表qss与自定义控件        教你如何使用样式表美化应用界面,并创建独特的自定义控件。掌握这些技能后,学员将能够设计出既美观又功能丰富的用户界面。第六章 图表与曲线        引入pyqtgraph,展示如何在PySide6应用绘制图表和动态曲线。第七章 数据库编程        带你进入数据库编程世界,使用sqlite3与PySide6结合,进行数据存储和管理。第八章 项目实战:高仿有道词典        通过一个高仿有道词典的项目,将所学知识融会贯通,实战演练。课程将会接入翻译接口,开发一个属于自己的翻译软件。第九章 打包与部署       教你如何将PySide6项目打包成exe,并使用Inno Setup制作安装包,介绍软件更新、卸载策略,让你的应用轻松上线。第十章 课程总结        回顾整个课程的学习内容,巩固知识点,为进一步的学习和应用打下坚实的基础。教学特色       实战案例:每个章节都配备实战案例,让学习者在实践深化理解。       代码资料全覆盖:提供全套课程代码资料下载,便于学习者随时查阅和复习。       高效学习路径:课程内容结构清晰,由浅入深,适合不同层次的学习者。       本课程提供全部代码与在线答疑。谁应该学习这个课程       对图形界面开发感兴趣的编程新手。       希望提升个人技能,进入或者深耕在GUI开发领域的开发者。       需要快速掌握PySide6进行项目开发的软件工程师。结语        通过本课程的学习,你不仅能掌握PySide6的核心技能,还能通过实战项目提升解决实际问题的能力,最终让你能独立完成专业的GUI应用开发。随着技术的深入,你将发现PySide6不仅仅是一个工具库,它开启的是一扇通往高效、美观应用开发的大门。        开始PySide6的学习之旅,让你的编程之路更加精彩!

16,211

社区成员

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

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