2012-06-21 185 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