【问题标题】:Problems with QDialog in QtQt中QDialog的问题
【发布时间】:2010-04-20 08:28:18
【问题描述】:

我正在为 Symbian 使用 Qt。我从 QMenu 打开的 QDialog 有一些问题。 QDialog 显示得很好,在 QDialog 中我有一个 QDialogBu​​ttonBox,带有一个关闭 QDialog 的按钮。但是如果我关闭 QDialog 然后再次从 QMenu 打开它,它会显示,但 QDialogBu​​ttonBox 中的按钮不会显示。相反,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 可能值得一试。

标签: qt qdialog


【解决方案1】:

如果您希望您的对话框是模态的,请使用 exec()。否则,你应该使用 show() 和 raise() 让 sur 它在上面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多