在QT中,当点击一个按钮并弹出一个窗口时,用户仍然可以返回并单击相同的按钮(无限次)。如何才能使按钮弹出的窗口保持在其他窗口的顶部? 在这种情况下,弹出窗口的是“编辑”按钮。
这是window.cpp
#include "window.h"
#include "editwindow.h"
#include "ui_window.h"
#include <QtGui/QApplication>
#include <QtGui>
Window::Window(QWidget *parent) :
QDialog(parent),
ui(new Ui::Window)
{
ui->setupUi(this);
ShowEdit = new QPushButton(tr("Edit"));
ShowEdit -> show();
connect(ShowEdit, SIGNAL(clicked()), this, SLOT(popup()));
Remove = new QPushButton(tr("Remove"));
Remove -> show();
connect(Remove, SIGNAL(clicked()), this, SLOT(ProgramRemove()));
OK = new QPushButton(tr("OK"));
OK -> show();
connect(OK, SIGNAL(clicked()), this, SLOT(Saved()));
Quit = new QPushButton(tr("Quit"));
Quit -> show();
connect(Quit, SIGNAL(clicked()), this, SLOT(close()));
QLabel *tableLabel = new QLabel(tr("All Programs"));
QVBoxLayout *buttonLayout2 = new QVBoxLayout;
buttonLayout2 -> addWidget(ShowEdit);
buttonLayout2 -> addWidget(Remove);
//buttonLayout2 -> addStretch();
QHBoxLayout *buttonLayout2_2 = new QHBoxLayout;
buttonLayout2_2 -> addWidget(Quit);
buttonLayout2_2 -> addWidget(OK);
/*******************************************************************************/
/***************************Below is for Table**********************************/
/*******************************************************************************/
PTable = new QTableWidget(10, 10);
//PTable ->setHorizontalHeader(tr("Program Names"));
//inputs->setText(QString::number(row));
//PTable->setItem(row, column, inputs);
QHBoxLayout *PTableLayout = new QHBoxLayout;
PTableLayout ->addWidget(PTable);
/*------------------------------------------------------------------------------*/
/*------------------------construct window--------------------------------------*/
/*------------------------------------------------------------------------------*/
QGridLayout *SecondLayout = new QGridLayout;
SecondLayout -> addWidget(tableLabel, 0, 0);
SecondLayout -> addLayout(PTableLayout, 1, 0);
SecondLayout -> addLayout(buttonLayout2, 0, 1);
SecondLayout -> addLayout(buttonLayout2_2, 2, 0);
setLayout(SecondLayout);
setWindowTitle(tr("Settings"));
}
Window::~Window()
{
delete ui;
}
void Window :: popup()
{
EditWindow* window_3 = new EditWindow(this);
window_3->move(QPoint(550, 100));
window_3->show();
window_3->raise();
}
void Window :: closeBoth()
{
return;
}
void Window :: Saved()
{
return;
}
void Window :: ProgramRemove()
{
return;
}
答案 0 :(得分:4)
这是因为QDialog
不是模态的,这意味着它不会阻止对其他窗口的输入。
您可以使用setWindowModality()
(Description of Modality in QT)中的QDialog
来设置此媒体资源。基本上你只需要做以下事情:
setWindowModality(Qt::WindowModal);
答案 1 :(得分:3)
如果EditWindow
是QDialog
,您可以调用exec方法而不是show。
来自Qt文档:
int QDialog :: exec()[slot]
将对话框显示为模式对话框, 阻止,直到用户关闭它。该 function返回DialogCode结果。
如果对话框是应用程序模式, 用户无法与任何其他用户进行互动 窗口在同一个应用程序中直到 他们关闭对话框。如果是对话框 是窗口模态,只与...交互 父窗口被阻止了 对话框已打开。默认情况下,该对话框 是申请模式。
这样,当EditWindow打开时,用户无法与父窗口进行交互。