如何使QLineEdit编辑在文本来自QPushButton时启用

How to make QLineEdit editing enabled while text comes from a QPushButton?

本文关键字:本来 QPushButton 启用 QLineEdit 何使 编辑 文本来      更新时间:2023-10-16

在我的项目中,我使用了两个QPushButton和两个QLineEdit。我以这种方式将这些QPushButton与这些QLineEdit连接起来,以便QPushButton允许用户从硬盘驱动器中选择一个文件夹,选择后,相应的QLineEdit将显示所选文件夹的URL路径。

我也喜欢允许用户自己编写URL,如果他不想点击QPushButton并选择文件夹。而且如果用户愿意,他也可以在选择后编辑URL QPushButton .

在这里,我面临两个问题。

1(一个QLineEdit允许用户写入,但另一个不允许用户。

2(当用户按下QPushButton时,相应QLineEdit上的写入模式将被禁用。

以下是代码。这里的InputLineOutputLine是两个QLineEdit

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
/* Setting the size of Mainwindow */
this->setWindowTitle("Crop Multiple Object");
this->setFixedHeight(600);
this->setFixedWidth(800);
/* Setting QLabel for displaying Image  */
QLabel* image= new QLabel(this);
image->setGeometry(20,130,500,430);
image->setStyleSheet("QLabel {background-color: rgb(200,200,200)}");
image->show();
/* Set input URL */
QPushButton* InputURL = new QPushButton(this);
InputURL->setText("Input URL");
InputURL->setGeometry(20,30,100,30);
connect(InputURL, SIGNAL(clicked(bool)), this, SLOT(ReceiveInputURL()));
/* Set output URL */
QPushButton* OutputURL = new QPushButton(this);
OutputURL->setText("Output URL");
OutputURL->setGeometry(20,80,100,30);
connect(OutputURL, SIGNAL(clicked(bool)), this, SLOT(ReceiveOutputURL()));
/* Set Input URL Line*/
InputLine->setGeometry(140,30,400,30);
OutputLine->setGeometry(140,80,400,30);
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::ReceiveInputURL()
{
    QFileDialog dialog(this);
    dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg)"));
    dialog.setViewMode(QFileDialog::Detail);
    QString dir = QFileDialog::getExistingDirectory(this, tr("Input Image File"),
                                                 "/home",
                                                 QFileDialog::ShowDirsOnly
                                                 | QFileDialog::DontResolveSymlinks);
    if(!dir.isEmpty())
    {
        InputLine->setText(dir + "/");
    }
}
void MainWindow::ReceiveOutputURL()
{
    QFileDialog dialog(this);
    dialog.setViewMode(QFileDialog::Detail);
    QString dir = QFileDialog::getExistingDirectory(this, tr("Output Image File"),
                                                 "/home",
                                                 QFileDialog::ShowDirsOnly
                                                 | QFileDialog::DontResolveSymlinks);
    if(!dir.isEmpty())
    {
        OutputLine->setText(dir+ "/");
    }
}

我感谢任何帮助。提前谢谢。

问题是您在创建MainWindow centralWidget之前创建QLineEdit对象。这会将中央小部件放在QLineEdit小部件的顶部,因此它会阻止鼠标事件通过。要对此进行测试,您可以使用 centralWidget()->setAttribute(Qt::WA_TransparentForMouseEvents); 禁用中央小部件的鼠标事件,您会注意到可以通过鼠标单击访问您的QLineEdit小部件。

但是,您不应直接在MainWindow上放置任何小部件。这不是QMainWindow应该如何使用的。相反,您应该将小部件放在 centralWidget .您应该阅读QMainWindow的文档以了解更多信息。