qlineedit 自动调整内容
qlineedit auto resize to content
我正在尝试用 lineedit 和按钮做一个小部件。如果单击该按钮,它应该会打开一个文件对话框,我可以在其中 select 一个文件。然后文件名应该显示在 lineedit 中。这是我到目前为止得到的:
#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());
}
按钮的打开文件功能正常,并且在lineedit中也显示了正确的路径。但是调整大小不起作用。谁能帮我一把?
首先,您的代码存在一些格式问题,因此我对其进行了编辑并添加了一些我自己的代码。我使用 setFixedSize()
而不是 resize()
因为用户可以决定最小化 window 如果发生这种情况那么你为什么要费心显示完整的文件路径(我猜你想显示始终出于某种原因的完整路径,而不是让用户能够将 window 最小化到 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();
}
我使用正确的字体并仅更改宽度来执行此操作:
void Widget_openimage::resizeToContent(QLineEdit *lineEdit)
{
QString text = lineEdit->text();
QFontMetrics fm(lineEdit->font());
int pixelsWide = fm.width(text);
lineEdit->setFixedWidth(pixelsWide);
adjustSize();
}
我正在尝试用 lineedit 和按钮做一个小部件。如果单击该按钮,它应该会打开一个文件对话框,我可以在其中 select 一个文件。然后文件名应该显示在 lineedit 中。这是我到目前为止得到的:
#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());
}
按钮的打开文件功能正常,并且在lineedit中也显示了正确的路径。但是调整大小不起作用。谁能帮我一把?
首先,您的代码存在一些格式问题,因此我对其进行了编辑并添加了一些我自己的代码。我使用 setFixedSize()
而不是 resize()
因为用户可以决定最小化 window 如果发生这种情况那么你为什么要费心显示完整的文件路径(我猜你想显示始终出于某种原因的完整路径,而不是让用户能够将 window 最小化到 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();
}
我使用正确的字体并仅更改宽度来执行此操作:
void Widget_openimage::resizeToContent(QLineEdit *lineEdit)
{
QString text = lineEdit->text();
QFontMetrics fm(lineEdit->font());
int pixelsWide = fm.width(text);
lineEdit->setFixedWidth(pixelsWide);
adjustSize();
}