Я разрабатываю приложение с использованием Qt 4.5 (под Windows Vista, но хочу, чтобы оно было кроссплатформенным). Я использую C ++
Я хотел бы создать всплывающее окно, которое содержит виджет QLineEdit, с функцией, которая, когда пользователь взаимодействует с виджетом QLineEdit, всплывающее окно не активируется (главное окно приложения остается активным).
Создание окна (виджета) с помощью Qt :: Popup | Флаги Qt :: Window дают мне именно то, что я хочу, за исключением того, что я не хочу, чтобы это обеспечивало эффект 3D-тени. Я хочу окно без границ. Обратите внимание, что флаг Qt :: FramelessWindowHint не достигает этого.
Кто-нибудь получил какие-нибудь подсказки?
Дополнительные пояснения. Ниже приведен фрагмент простого тестового приложения, в котором создается окно с кнопкой. Когда кнопка нажата, появляется всплывающее окно, и пользователь может ввести в поле QLineEdit. Когда пользователь делает это, главное окно остается активным:
http://howlettresearch.com/popup_img_1.png
Однако обратите внимание на теневую границу во всплывающем окне (мне не удалось избавиться от этого).
Для сравнения, создание окна, как в закомментированной строке, позволяет создавать всплывающее окно без тени, но когда пользователь щелкает QLineEdit во всплывающем окне, главное окно больше не активно. Вы можете сказать, потому что тень на главном окне изменилась.
http://howlettresearch.com/popup_img_2.png
Мне действительно нужно всплывающее окно, которое ведет себя так, как будто оно является частью основного окна. Как примечание, всплывающее окно исчезает при нажатии за его пределами, но это почти то поведение, которое я хочу, и я могу работать с этим, и grabMouse и т.д., чтобы делать то, что я хочу ... при условии, что я могу избавиться от этой тени!
PopupTest::PopupTest(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
QPushButton* pb = new QPushButton("test button");
setCentralWidget(pb);
QObject::connect(pb, SIGNAL(clicked()), this, SLOT(handleClick()));
}
void PopupTest::handleClick()
{
//QFrame* popup1 = new QFrame(this, Qt::Tool | Qt::Window | Qt::FramelessWindowHint);
QFrame* popup1 = new QFrame(this, Qt::Popup | Qt::Window );
popup1->resize(150,100);
QLineEdit *tmpE = new QLineEdit( popup1 );
connect( tmpE, SIGNAL( returnPressed() ), popup1, SLOT( hide() ) );
tmpE->setGeometry(10,10, 130, 30);
tmpE->setFocus();
popup1->show();
}
PopupTest::~PopupTest()
{
}