qt resize qlineedit

qt - qlineedit cambia automáticamente el tamaño del contenido



resize (1)

Estoy tratando de hacer un pequeño widget con un lineedit y un botón. Si se hace clic en el botón, debería abrir un archivo de diálogo donde pueda seleccionar un archivo. El nombre del archivo debería mostrarse en el lineedit. Esto es lo que obtuve hasta ahora:

#include "widget_openimage.h" #include <QFontMetrics> Widget_openimage::Widget_openimage(QWidget *parent) : QWidget(parent) { // horizontal layout layout = new QHBoxLayout(); // linedit on the left which shows the path of the chosen file lineedit = new QLineEdit(); lineedit->setReadOnly(true); // pushbutton on the right to select the file btn = new QPushButton("..."); btn->setFixedSize(20,20); connect(btn, SIGNAL(clicked()), this, SLOT(btn_clicked())); connect(lineedit, SIGNAL(textChanged(QString)), this, SLOT(resize_to_content())); layout->addWidget(lineedit); layout->addWidget(btn); this->setLayout(layout); } void Widget_openimage::btn_clicked() { QString filename = QFileDialog::getOpenFileName(this,tr("Open"), "", tr("Image Files (*.png *.jpg *.bmp)); if (filename.isEmpty()) return; else { lineedit->setText(filename); } } void Widget_openimage::resize_to_content() { QString text = lineedit->text(); QFontMetrics fm = lineedit->fontMetrics(); int width = fm.boundingRect(text).width(); lineedit->resize(width, lineedit->height()); }

la función de abrir archivo del botón funciona bien, y la ruta correcta también se muestra en la línea. Sin embargo, el cambio de tamaño no funciona. ¿alguien puede ayudarme?


En primer lugar, hay algunos problemas de formato con su código, así que los edité y agregué algunos propios. Utilicé setFixedSize() lugar de setFixedSize() porque el usuario puede decidir minimizar la ventana y si eso sucede, entonces ¿por qué te molestas en mostrar la ruta completa del archivo (supongo que quieres mostrar la ruta completa en todo momento por un motivo? y no permitir que el usuario pueda minimizar la ventana a un punto donde no se muestre todo el texto en el lineedit .

Widget_openimage::Widget_openimage(QWidget *parent) : QWidget(parent) { // horizontal layout layout = new QHBoxLayout(); // linedit on the left which shows the path of the chosen file lineedit = new QLineEdit; lineedit->setReadOnly(true); // pushbutton on the right to select the file btn = new QPushButton("..."); btn->setFixedSize(20,20); connect(btn, SIGNAL(clicked()), this, SLOT(btn_clicked())); //do this connection so when the text in line edit is changed, its size changes to show the full text connect(lineedit, SIGNAL(textChanged(QString)), this, SLOT(resize_to_content())); layout->addWidget(lineedit); layout->addWidget(btn); this->setLayout(layout); } void Widget_openimage::btn_clicked() { QString filename = QFileDialog::getOpenFileName(this,tr("Open"), "", tr("Image Files (*.png *.jpg *.bmp)")); //you have to set the file path text somewhere here lineedit->setText(filename); if (filename.isEmpty()) { return; } } void Widget_openimage::resize_to_content() { QString text = lineedit->text(); //use QFontMetrics this way; QFont font("", 0); QFontMetrics fm(font); int pixelsWide = fm.width(text); int pixelsHigh = fm.height(); lineedit->setFixedSize(pixelsWide, pixelsHigh); Widget_openimage::adjustSize(); }