Qt QDialog不';如果是模态,则不接受文本输入

Qt QDialog不';如果是模态,则不接受文本输入,qt,qt4,dialog,Qt,Qt4,Dialog,Qt对话框(Qt4.6/windows)的奇怪错误 如果对话框是从主窗口(从工具栏/或菜单操作)启动的,并且是模式对话框,则所有文本框都不会接受任何编辑。其他控件(下拉、按钮等)全部工作 如果我使用show()而不是exec()将对话框设置为非模态,那么它将非常有效 有人遇到过这样的事情吗 示例代码: #include "ui_testDlg.h" class TestDlg : public QDialog, public Ui::TestDlg { Q_OBJECT;

Qt对话框(Qt4.6/windows)的奇怪错误

如果对话框是从主窗口(从工具栏/或菜单操作)启动的,并且是模式对话框,则所有文本框都不会接受任何编辑。其他控件(下拉、按钮等)全部工作

如果我使用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中创建的最简单的对话框+行编辑控件

void MainWindow::onTest()
{
TestDlg *test = new TestDlg(this);
test->show();  // works
//or    
test->exec();  // opens dlg but can't type in it!
}

编辑:如果我只使用QInputWidget,这是同样的问题——这只是MainWindow中的一个问题。所以一定是我在阻塞/消耗某些信号?

您可以将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上的Qt4.6)

我也遇到了同样的问题。我为我的案子想出了一个解决方案,我不确定它对你的案子是否也有用

所以基本上我要创建一个登录对话框。在显示主窗口之前,首先显示登录对话框。如果登录失败,我就退出我的程序

我的代码如下所示:

MainWindow w;
LoginDialog loginDialog;
loginDialog.exec();
w.init();
w.showApp();
当登录对话框出现时,其上的lineEdit无法接受任何文本输入

但如果我以这种方式重新组织代码:

LoginDialog loginDialog;
loginDialog.exec();
MainWindow w;
w.init();
w.showApp();

lineEdit现在可以工作了。我猜主窗口的构造函数中有什么东西弄乱了事件循环。

您能提供一个发生这种情况的最小示例吗?当您明确地运行
setModal(true)时会发生什么;show()。也许你可以发布你的ui文件?如果我使用QInputWidget::也是一样的问题,所以它一定是我在主窗口中设置的,我正在捕获的一些信号