2012-06-21 103 views
0

我试图更改默认QProgressDialog显示更新的状态:添加标题和图标图像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(); 

我怎样才能改变这个默认大小,添加图标的图像,更改标题?

回答

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) r更新程序。

编辑:现在我想起来了,如果你沿着这条道路走它可能会更易于只是创建一个新的插槽,把所有的东西进行更新,这样的事情:

//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))); 

但是,这意味着你不能单独升级方面了。取决于你在做什么,它可能是有用的。

2

您可以通过setWindowTitle()更改对话框标题,设置它的大小和标签。标签可以容纳QStringQPixmap但不是两者。

 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); 

如果你需要更广泛的灵活性,你应该继承一个QDialog,并添加一个QProgressBar每一起其他必要的部件像QLablel S和QButtonGroup秒。

+0

这也是一个很好的答案,但我更喜欢其他方法,因为它具有更大的灵活性。感谢您的回答。 – ssk