我必须将焦点事件从某个QLineEditelement(ui->lineEdit)连接到方法focus().我怎样才能做到这一点?
我正在使用给定的代码,我希望用户在 QLineEdit 小部件中输入文本,按复制!按钮并查看输入的文本替换“N/A”标签。我的问题是:按照此过程,如何通过简单的鼠标单击清除 QLineEdit 小部件中输入的文本?
从我读到的(this、this和this)来看,我似乎需要在扩展 QLineEdit 的新类中重新实现 focusInEvent()。我的问题是我的 GUI 代码是使用 pyuic5 从 Qt Designer 导入的,上面引用的示例似乎没有考虑到这一点。
这是我的代码:
from PyQt5.QtWidgets import *
import sys
import QLineEdit_test
class MainWindow(QMainWindow, QLineEdit_test.Ui_QLineEdit_test):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.copy_button.clicked.connect(self.copy_and_print)
def copy_and_print(self):
self.label.setText(self.lineEdit.text())
def main():
app = QApplication(sys.argv)
form = MainWindow()
form.show()
app.exec_()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
这是我转换后的 .ui 文件:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_QLineEdit_test(object):
def setupUi(self, QLineEdit_test):
QLineEdit_test.setObjectName("QLineEdit_test")
QLineEdit_test.resize(300, 200)
QLineEdit_test.setMaximumSize(QtCore.QSize(300, 200))
self.centralwidget = …Run Code Online (Sandbox Code Playgroud) 我希望能够知道QLineEdit它是否是一次点击.所以我想我应该重新实现以下功能(??):
void QLineEdit::focusInEvent ( QFocusEvent * e ) [virtual protected]
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
另外,请告诉我如何使用focusInEvent()函数以了解QLineEdit myEdit;对象是否有焦点.
编辑:我写了以下功能:
bool LoginDialog::eventFilter(QObject *target, QEvent *event)
{
if (target == m_passwordLineEdit)
{
if (event->type() == QEvent::FocusIn)
{
if(checkCapsLock())
{
QMessageBox::about(this,"Caps Lock", "Your caps lock is ON!");
}
return true;
}
}
return QDialog::eventFilter(target, event);
}
Run Code Online (Sandbox Code Playgroud)
并m_passwordLineEdit在LoginDialog类构造函数中注册如下:
m_passwordLineEdit->installEventFilter(this);
Run Code Online (Sandbox Code Playgroud)
它落入了MessageBox-es的无限循环中.请帮我解决这个问题.实际上我想用弹出窗口(不带a QMessageBox)来实现这个功能.是否可以满足QLabel这种需求?
我有两个小部件mainwindow123和二等.在我的MainWidget.cpp中有一个lineedit和button字段.最初我可以将焦点设置在行编辑上.但是在来自second.cpp Widget后,我无法将注意力集中在lineedit上.请帮帮我..哪个地方我犯了错误?提前致谢.
这是我的代码MainWidget.cpp
MainWidget::MainWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MainWidget)
{
ui->setupUi(this);
s = new second();
connect(ui->pushButton, SIGNAL(clicked()),this,SLOT(callSecond()));
}
MainWidget::~MainWidget()
{
delete ui;
}
void MainWidget::callSecond()
{
s->show();
}
Run Code Online (Sandbox Code Playgroud)
second.cpp
second::second(QWidget *parent) :
QWidget(parent)
{
QPushButton *first = new QPushButton("first");
first->setStyleSheet(
"background-color:black;"
);
QGridLayout *d = new QGridLayout();
d->addWidget(frist,0,0,1,1);
setLayout(d);
connect(first,SIGNAL(clicked()),this,SLOT(first()));
}
void second:: first()
{
this->hide();
}
Run Code Online (Sandbox Code Playgroud)