line_edit_with_button.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011, Willow Garage, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Willow Garage, Inc. nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  */
29 
31 
32 #include <QPushButton>
33 #include <QLineEdit>
34 #include <QHBoxLayout>
35 #include <QKeyEvent>
36 #include <QApplication>
37 
38 namespace rviz
39 {
40 LineEditWithButton::LineEditWithButton(QWidget* parent) : QLineEdit(parent)
41 {
42  button_ = new QPushButton(this);
43  button_->setText("...");
44  button_->setCursor(Qt::ArrowCursor);
45  button_->setDefault(false);
46  button_->setAutoDefault(false);
47  button_->setFocusPolicy(Qt::NoFocus);
48 
49  connect(button_, SIGNAL(clicked()), this, SLOT(onButtonClick()));
50 }
51 
52 void LineEditWithButton::resizeEvent(QResizeEvent* event)
53 {
54  // This widget does not use a QLayout object, because I want the
55  // child button to be sized and positioned a specific way. This
56  // function lays out the child button based on the new size of the
57  // LineEdit.
58 
59  int padding = 1;
60 
61  // Make sure the text area doesn't go under the button.
62  setTextMargins(padding, padding, height(), padding);
63 
64  // Call the original resize handler.
65  QLineEdit::resizeEvent(event);
66 
67  // Make the button square, matching the height of this widget minus
68  // padding, and located all the way to the right.
69  int button_width = height() - 2 * padding;
70  int button_height = button_width;
71  button_->setGeometry(width() - button_width - padding, padding, button_width, button_height);
72 }
73 
75 {
76  // I couldn't find a way to directly tell the editor that I was
77  // done with it here. "Q_EMIT returnPressed()", "Q_EMIT
78  // editingFinished()" etc did nothing. So instead, here I
79  // simulate the user pressing and releasing the "Return" key,
80  // which does indeed make it act like I want: when you select a
81  // topic from the dialog and the dialog closes, the property's
82  // Setter is called and this editor closes.
83  QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier);
84  QApplication::postEvent(this, event);
85  event = new QKeyEvent(QEvent::KeyRelease, Qt::Key_Return, Qt::NoModifier);
86  QApplication::postEvent(this, event);
87 }
88 
89 } // end namespace rviz
void resizeEvent(QResizeEvent *event) override
void simulateReturnPressed()
Send key events to mimic the "return" key being pressed and released. Useful ending an edit session a...
LineEditWithButton(QWidget *parent=nullptr)
virtual void onButtonClick()
Override this to do something when the button is clicked.


rviz
Author(s): Dave Hershberger, David Gossow, Josh Faust
autogenerated on Sat May 27 2023 02:06:24