我有这段代码:
QString text = QInputDialog::getText(this, tr("Key:"), tr("Key:"), QLineEdit::Password, "", &ok);
我无法将此对话框显示为中心屏幕,我浏览了WindowFlags并尝试将QInputDialog
初始化为变量,调用move然后调用getText
,肯定它没有&#39 ; t工作要么窗口未初始化尚未移动。在调用getText之后,我不想创建其他线程/计时器来移动它,这不是一个好主意。
有什么想法吗?
答案 0 :(得分:1)
它不起作用,因为当您使用QInputDialog
作为变量时,您不应再使用static
方法。因此,您需要类似于静态方法的下一代码,因为调用exec()
(默认情况下为模态对话框)。对我来说很正常:
QString mText;
QInputDialog *inp = new QInputDialog(this);
inp->setLabelText(tr("Key:"));
inp->setWindowTitle(tr("Key:"));
inp->setTextEchoMode(QLineEdit::Password);
inp->adjustSize();
inp->move(QApplication::desktop()->screen()->rect().center() - inp->rect().center());
if(inp->exec() == QDialog::Accepted)
mText = inp->textValue();
qDebug() << mText;
也可以将对话框置于中心位置:
QSize screenSize = QApplication::desktop()->geometry().size();
int primaryScreenWidth = screenSize.width();
int primaryScreeHeight= screenSize.height();
int widgetWidth = inp->width();
int widgetHeight= inp->height();
inp->move(primaryScreenWidth/2 - widgetWidth/2, primaryScreeHeight/2 - widgetHeight/2);