如果模态,QDialog不接受文本输入

时间:2010-02-01 21:03:37

标签: qt qt4 dialog

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中的一个问题。那么我必须阻止/消费一些信号吗?

2 个答案:

答案 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现在可以正常工作。我想主窗口的构造函数中的某些内容搞砸了事件循环。