【问题标题】:QDialog is blank with show commandQDialog 是空白的 show 命令
【发布时间】:2014-04-16 10:25:06
【问题描述】:

如果我创建我的 QDialog 并使用 exec() 显示它的模态,一切正常,但我需要这个没有模态!

使用 show() 对话框是 empty

ProgramLoading *programLoading = new ProgramLoading();  
programLoading->show(); 

// some code

programLoading->done(0);

构造函数

ProgramLoading::ProgramLoading(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);

    setWindowFlags( Qt::CustomizeWindowHint ); // remove window border
}

不要认为 Dialog 代码有问题,因为它适用于 exec()!

有什么提示吗?谢谢!

PS:我正在使用 VisualStudio 2008 的 QT 插件

【问题讨论】:

  • 非模态对话框可以看作是你的主窗口的扩展,至少它应该显示构造函数在调用show()之后创建的东西。愿意分享你对穷人做了什么QDialog
  • // some code 部分是否存在阻塞循环?
  • 我添加了构造函数代码! @thuga 没有
  • 向我们展示 done() 中的代码
  • 注意 exec() 会阻塞直到对话框关闭,show() 只是显示它。您必须进入事件循环,而不是立即调用 done() 才能显示任何内容。

标签: c++ qt visual-studio-2008


【解决方案1】:

mw(默认带窗饰):

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    sd = new SplashDialog();
    sd->show();

    QTimer::singleShot(10000,this,SLOT(closeSplashDialog()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::closeSplashDialog()
{
    sd->close();
    delete sd;
}

splash(带有标签和按钮的 UI):

SplashDialog::SplashDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SplashDialog)
{
    ui->setupUi(this);

    setWindowFlags( Qt::CustomizeWindowHint );
}

SplashDialog::~SplashDialog()
{
    delete ui;
}

Splash Dialog 打开并在 10 秒后按预期关闭

【讨论】:

  • 谢谢!注意:将 ProgramLoading 声明为 MainWindow 的成员,一切正常!
猜你喜欢
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
相关资源
最近更新 更多