我试图做一个小部件与lineedit和按钮.如果按钮被点击,它应该打开一个filedialog在那里我可以选择一个文件.文件名应该然后显示在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());
}
按钮的打开文件功能工作正常,正确的路径也显示在行编辑器中。但是调整大小不起作用。有人能帮我吗?
3条答案
按热度按时间k3bvogb11#
首先你的代码有一些格式问题,所以我编辑了它们并添加了一些我自己的。我使用
setFixedSize()
而不是resize()
,因为用户可以决定最小化窗口,如果发生这种情况,那么为什么你必须麻烦显示完整的文件路径(我猜你想在任何时候都显示完整的路径是有原因的,而不是让用户能够最小化窗口到一个点,而不是所有的文本在lineedit
显示。ws51t4hk2#
我这样做使用适当的字体,只改变宽度:
tez616oj3#
这适用于Qt 6.3:
如果您还希望根据文本缩小编辑,请将
setMinimumSize
替换为setFixedSize
。