我有一个基于QDialog
的课程。
我有一个QEditLine *editLine
和QButton *button
。
我使用按钮的clicked()
信号。和editLine的editingFinished()
信号。
当我更改editLine中的文本并首先按下按钮时,会发出editingFinished()
信号。在插槽方法中,我调用QMessageBox::question()
。
之后,我无法收到按钮的clicked()
信号。
我尝试将Qt::QueuedConnection
用于连接方法,但它没有帮助。
如何解决我的问题?
答案 0 :(得分:1)
我认为问题是消息框的事件循环阻塞了主事件循环,因此不会发出按钮的信号。但是,如果打开模态对话框,您打算如何计划单击按钮?
答案 1 :(得分:0)
以下是代码:
Window::Window(QWidget *parent)
: QDialog(parent)
{
setupUi(this);
appPath = QApplication::applicationDirPath();
connect(pButton, SIGNAL(clicked()), this, SLOT(build()), Qt::QueuedConnection);
connect(pLineEdit, SIGNAL(editingFinished()), this, SLOT(pathChanged()), Qt::QueuedConnection);
}
void Window::pathChanged()
{
QString path = pLineEdit->text();
if(createPath(path))
updatePath(path);
}
bool Window::createPath(QString path)
{
if(!QDir(path).exists())
{
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, tr("Folder is not exist"), "Folder " + path + " is not exist. Do you want to create it?", QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes)
{
QDir dir;
dir.mkpath(path);
}
}
return true;
}
class Window : public QDialog, public Ui::GLConverterDialogUI
{
Q_OBJECT
public:
Window(QWidget *parent = 0);
~Window(void);
......
}
答案 2 :(得分:0)
我在另一个应用程序中遇到同样的问题。我用了一些图书馆。我猜这个库使用QAbstractButton的pressed()信号而不是clicked()。当我按下按钮后调用QFileDialog::getSaveFileName()
时,似乎mouseReleaseEvent()
也没有被调用。因此,在关闭对话框按钮后仍然按下,我必须手动发送MouseButtonRealese事件。
也许我应该用一些特殊参数调用对话框?