1

我正在尝试更改默认的 QProgressDialog 以显示更新状态:

 ASSERT( connect( &(updater.GetUpdateInstaller()),  SIGNAL(progressValue(int)),
                                        progressDialog, SLOT(setValue(int)) ) );
 ASSERT( connect( &(updater.GetUpdateInstaller()),  SIGNAL(progressText(QString)),
                                        progressDialog, SLOT(setLabelText(QString)) ) );

 //update the packages using the updater
 updater.UpdatePackages();

如何更改默认大小、添加图标图像和更改标题?

4

2 回答 2

3

您可以通过 更改对话框标题setWindowTitle(),设置它的大小和标签。标签可以包含 aQString或 aQPixmap但不能同时包含两者。

     QProgressDialog * dialog = new QProgressDialog(this) ;
     // fix dialog height
     dialog->setMinimumHeight(400);
     dialog->setMaximumHeight(400);
     // set dialog title
     dialog->setWindowTitle("Progress Dialog");
     QLabel * labl  = new QLabel(this);
     labl->setPixmap(QPixmap(":/images/icon.png"));
     labl->setText("text");
     dialog->setLabel(labl);

如果您需要更广泛的灵活性,您应该将 a 子类化并在所有其他必要的小部件(如s 和s)旁边QDialog添加 a 。QProgressBarQLablelQButtonGroup

于 2012-06-21T17:27:52.547 回答
2

我认为您可以通过创建自己的 QProgressDialog 子类并添加自己的 SLOTS 来使其工作。像这样的东西:

MyQProgressDialog.h

class MyQProgressDialog : public QProgressDialog
{
    Q_OBJECT

    public slots:
    setTitle(QString title);
    setIcon(QIcon icon);
    setSize(int w, int h);
};

MyQProgressDialog.cpp

void MyQProgressDialog::setTitle(QString title)
{
    setWindowTitle(title);
}
void MyQProgressDialog::setIcon(QIcon icon)
{
    setWindowIcon(icon)
}
void MyQProgressDialog::(int w, int h)
{
    setFixedSize(w, h);
}

然后改变你的联系:

ASSERT( connect( &(updater.GetUpdateInstaller()), SIGNAL(progressValue(int)), progressDialog, SLOT(setValue(int))));
ASSERT( connect( &(updater.GetUpdateInstaller()), SIGNAL(progressText(QString)), progressDialog, SLOT(setLabelText(QString))));
ASSERT( connect( &(updater.GetUpdateInstaller()), SIGNAL(progressIcon(QIcon)), progressDialog, SLOT(setIcon(QIcon))));
ASSERT( connect( &(updater.GetUpdateInstaller()), SIGNAL(progressSize(int, int)), progressDialog, SLOT(setSize(int, int)));


//update the packages using the updater
updater.UpdatePackages();

这包括您在更新程序中创建 2 个新信号 progressIcon(QIcon) 和 progressSize(int, int)。

编辑:现在我想到了,如果你这样做的话,创建一个新的插槽来更新所有的东西可能会更容易,就像这样:

//MyQProgressDialog.h
class MyQProgressDialog : public QProgressDialog
{
    Q_OBJECT

    public slots:
    updateEverything(Int value, QString text, QString title, QIcon icon, Int w, Int h);
};

//MyQProgressDialog.cpp
void MyQProgressDialog::updateEverything(Int value, QString text, QString title, QIcon icon, Int w, Int h)
{
    setWindowTitle(title);
    setWindowIcon(icon);
    setFixedSize(w, h);
    setValue(value);
    setLabelText(text);
}

//Connection
ASSERT( connect( &(updater.GetUpdateInstaller()), SIGNAL(progress(int, QString, QString, QIcon, Int, Int)), progressDialog, SLOT(updateEverything(progress(int, QString, QString, QIcon, Int, Int)));

但这意味着您不能再单独更新方面了。它可能很有用,具体取决于您在做什么。

于 2012-06-21T17:34:48.483 回答