我正在使用 Qt 4.5 开发一个应用程序(在 Windows Vista 下,但希望它是跨平台的)。我正在使用 C++
我想创建一个包含 QLineEdit 小部件的弹出窗口,其功能是当用户与 QLineEdit 小部件交互时,弹出窗口未激活(主应用程序窗口保持活动状态)。
使用 Qt::Popup 创建一个窗口(小部件)| Qt::Window flags 正是我想要的,除了我不想要它提供的 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()
{
}