On 9/4/20 3:20 PM, Kyle Edwards wrote:
I now have a minimum working test case:

Err, looks like that got mis-formatted. Let me try again...

// BEGIN

#include <QItemDelegate>
#include <QApplication>
#include <QFileDialog>
#include <QLineEdit>
#include <QResizeEvent>
#include <QStandardItemModel>
#include <QToolButton>
#include <QTreeView>
#include <QWidget>

class TestEdit : public QLineEdit
{
    Q_OBJECT
public:
    TestEdit(QWidget* parent = nullptr);
    void resizeEvent(QResizeEvent* e) override;

public slots:
    void chooseFile();

private:
    QToolButton* toolButton;
};

TestEdit::TestEdit(QWidget* parent)
    : QLineEdit(parent)
{
    this->toolButton = new QToolButton(this);
    this->toolButton->setText("...");
    QObject::connect(this->toolButton, SIGNAL(clicked(bool)), this, SLOT(chooseFile()));
}

void TestEdit::resizeEvent(QResizeEvent* e)
{
  // make the tool button fit on the right side
  int h = e->size().height();
  // move the line edit to make room for the tool button
  this->setContentsMargins(0, 0, h, 0);
  // put the tool button in its place
  this->toolButton->resize(h, h);
  this->toolButton->move(this->width() - h, 0);
}

void TestEdit::chooseFile()
{
    auto path = QFileDialog::getOpenFileName(this, "title", QString(), QString(),                                  nullptr, QFileDialog::DontResolveSymlinks);
    if (!path.isEmpty()) {
        this->setText(path);
    }
}

class TestItemDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
};

QWidget* TestItemDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
    return new TestEdit(parent);
}

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QWidget window;
    QTreeView view(&window);
    auto* model = new QStandardItemModel;
    view.setModel(model);
    model->insertRow(0);
    model->insertColumn(0);
    model->setData(model->index(0, 0), "Hello");
    view.setItemDelegate(new TestItemDelegate);
    window.show();
    return app.exec();
}

#include "qttest.moc"

// END

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to