首页 文章

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

提问于
浏览
1

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

如果他不想点击 QPushButton 并选择文件夹,我也想让用户自己编写 URL . 而且如果用户想要,他也可以在 QPushButton 选择之后编辑 URL .

我在这里遇到两个问题 .

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+ "/");
    }
}

我感谢任何帮助 . 提前致谢 .

1 回答

  • 0

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

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

相关问题