Qt对话框的奇怪错误(Qt4.6 / windows)
如果从MainWindow(从工具栏/或菜单操作)启动对话框并且它是模态的,则任何文本框都不会接受任何编辑。其他控件(下拉菜单,按钮等)都可以正常工作。
如果我使用show()而不是exec()创建非模态对话框,它可以完美运行!
有人遇到过这样的事吗?
示例代码:
#include "ui_testDlg.h"
class TestDlg : public QDialog, public Ui::TestDlg
{
Q_OBJECT;
public:
TestDlg(QWidget *parent=0) {
setupUi(this);
}
~TestDlg(void) {}
private:
Ui::TestDlg ui;
};
TestDlg.ui只是在QDesigner中创建的最简单的对话框+ lineEdit控件。
void MainWindow::onTest()
{
TestDlg *test = new TestDlg(this);
test->show(); // works
//or
test->exec(); // opens dlg but can't type in it!
}
编辑:如果我只使用QInputWidget就会出现同样的问题 - 这只是MainWindow中的一个问题。那么我必须阻止/消费一些信号吗?
答案 0 :(得分:1)
您可以将TestDlg和Ui :: TestDlg之间的关系从子类更改为私有成员。
#include "ui_testdlg.h"
class TestDlg: public QDialog {
Q_OBJECT
public:
TestDlg(QWidget *parent = 0) : QDialog(parent), ui(new Ui::TestDlg)
{
ui->setupUi(this);
}
~TestDlg()
{
delete ui;
}
private:
Ui::TestDlg*ui;
};
QtCreator默认使用这样的新窗口小部件类,使用此设置我对QLineEdit
没有任何问题。 (关于WinXP的Qt 4.6)
答案 1 :(得分:0)
我遇到了同样的问题。我为我的案例找到了一个解决方案,我不确定它对你的案例是否有用。
所以基本上我正在尝试创建一个登录对话框。在我显示主窗口之前,我首先显示登录对话框。如果登录失败,我就退出我的程序。
我的代码如下所示:
MainWindow w;
LoginDialog loginDialog;
loginDialog.exec();
w.init();
w.showApp();
当登录对话框出现时,其上的lineEdit无法接受任何文本输入。
但如果我以这种方式重新组织代码:
LoginDialog loginDialog;
loginDialog.exec();
MainWindow w;
w.init();
w.showApp();
lineEdit现在可以正常工作。我想主窗口的构造函数中的某些内容搞砸了事件循环。