Я пытаюсь сделать небольшой виджет с линией и кнопкой. Если нажать кнопку, она должна открыть filedialog, где я могу выбрать файл. Затем имя файла должно отображаться в строке. Вот что я получил до сих пор:qlineedit auto resize to content
#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());
}
функция OpenFile кнопки отлично работает, и правильный путь показан в lineedit тоже. однако изменение размера не работает. может ли кто-нибудь дать мне руку?
Как правильный путь можно показать ему lineedit, когда вы не называйте это 'метод setText'? Кроме вас вызовите 'connect' в' textChanged (QString) 'сигнал в неправильном месте - вы должны называть его в конструкторе. – Amartel
извините, моя ошибка, setText была, конечно, в моем исходном коде, я только забыл об этом, когда писал вопрос. Я переместил textChanged-connect в конструктор сразу после другого один. но он все еще не работает ... – yangsunny