Qt从主窗口调用时显示无框架对话框

时间:2016-09-13 11:34:40

标签: c++ qt dialog

我正在学习qt并且正在尝试从书中学习一个例子,我们必须从主窗口应用程序中调用预先制作的对话框。

我已经创建了一个用于输入字符串的对话框(让我们称之为findDialog),输入的字符串被传递到QTableWidget中的自定义插槽以搜索输入的字符串。

我可以在一个名为"发现"的动作后立即调用该对话框。被触发,但问题是对话框显示为无框架。

我这样打电话给对话,请指出任何错误。

void MainWindow::find()
{
    // Check whether findDialog is already created
    if(!finddialog)
    {
        // create find dialog as a child to main window
        finddialog = new findDialog(this);
        // Connecting signals and slots 
     connect(finddialog,SIGNAL(forwardSearch(QString,Qt::CaseSensitivity)),
        sheetObject,SLOT(forwardSearch(QString,Qt::CaseSensitivity)));
      connect(finddialog,SIGNAL(backwardSearch(QString,Qt::CaseSensitivity)),
        sheetObject,SLOT(backwardSearch(QString,Qt::CaseSensitivity)));
    }
    // Show dialog
    finddialog->show();

    finddialog->move(200,200);
    // Raise if minimised
    finddialog->raise();
    // Activate it
    finddialog->activateWindow();
}

我不能使用exec,因为我没有将findDialog中的accept()插槽连接到任何东西。

我还附上了一张显示对话框的图片。请告诉我我所犯的错误以及如何用框架显示对话框。 findDialog without frame

2 个答案:

答案 0 :(得分:1)

知道了,

在显示对话框之前,我必须使用setWindowFlags设置窗口标志。

finddialog->setWindowFlags(Qt::Dialog);

将其显示为对话框

                  or

finddialog->setWindowFlags(Qt::Window);

将其显示为窗口

答案 1 :(得分:0)

您必须使用适当的finddialog创建Qt::WindowFlags。请参阅文档:Qt::WindowFlags。例如:

finddialog = new findDialog(this, Qt::Window);
  

表示窗口小部件是一个窗口,通常带有窗口系统   框架和标题栏,无论窗口小部件是否具有父级   或不。请注意,如果窗口小部件无法取消设置此标志   没有父母。

useful example