【发布时间】:2010-04-20 08:28:18
【问题描述】:
我正在为 Symbian 使用 Qt。我从 QMenu 打开的 QDialog 有一些问题。 QDialog 显示得很好,在 QDialog 中我有一个 QDialogButtonBox,带有一个关闭 QDialog 的按钮。但是如果我关闭 QDialog 然后再次从 QMenu 打开它,它会显示,但 QDialogButtonBox 中的按钮不会显示。相反,QMainWindow 中的按钮会显示,但它们是灰色的。
如何让 QDialog 按钮每次都显示?也许我在将焦点放在 QDialog 上时遇到了一些问题?我真的看不出我在这里做错了什么。
我用的代码不多,大家可以自己试试。这是我的代码:
在 QMainWindow 中,我使用以下内容创建菜单:
QAction *menuButton = new QAction("Menu", this);
menuButton->setSoftKeyRole(QAction::PositiveSoftKey);
QMenu *menu = new QMenu(this);
menuButton->setMenu(menu);
QAction *popup = new QAction("Show popup",this);
connect(popup, SIGNAL(triggered()), this, SLOT(showPopup()));
menu->addAction(popup);
addAction(menuButton);
这显示了 QDialog:
void MyMainWindow::showPopup(){
TestDialog *test = new TestDialog(this);
test->setAttribute(Qt::WA_DeleteOnClose);
test->show();
}
这是测试对话框:
TestDialog::TestDialog(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
QDesktopWidget* desktopWidget = QApplication::desktop();
QRect rect = desktopWidget->availableGeometry();
this->setFixedWidth(rect.width());
}
【问题讨论】:
-
我无法访问 Symbian,但我过去曾遇到过对话框问题。我会尝试的一件事是将TestDialog的构造函数更改为“TestDialog *test = new TestDialog();”请注意,构造函数调用中没有父对象。通常,如果我想将对话框限制在主窗口的框架内,我会按照您的方式进行操作。但在 Symbian 上,我不认为这是一个问题。我不会将此作为答案发布,因为我无法尝试。
-
当我希望对话框弹出和交互时,我习惯于在对话框上调用 exec。 show 应该可以,但 exec 可能值得一试。