void NSISUpdater::showDialog(const UpdateInfo &info) { // if the version tag is set, there is a newer version. QDialog *msgBox = new QDialog; msgBox->setAttribute(Qt::WA_DeleteOnClose); QIcon infoIcon = msgBox->style()->standardIcon(QStyle::SP_MessageBoxInformation, 0, 0); int iconSize = msgBox->style()->pixelMetric(QStyle::PM_MessageBoxIconSize, 0, 0); msgBox->setWindowIcon(infoIcon); QVBoxLayout *layout = new QVBoxLayout(msgBox); QHBoxLayout *hlayout = new QHBoxLayout; layout->addLayout(hlayout); msgBox->setWindowTitle(tr("New Version Available")); QLabel *ico = new QLabel; ico->setFixedSize(iconSize, iconSize); ico->setPixmap(infoIcon.pixmap(iconSize)); QLabel *lbl = new QLabel; QString txt = tr("<p>A new version of the %1 Client is available.</p>" "<p><b>%2</b> is available for download. The installed version is %3.</p>") .arg(Utility::escape(Theme::instance()->appNameGUI()), Utility::escape(info.versionString()), Utility::escape(clientVersion())); lbl->setText(txt); lbl->setTextFormat(Qt::RichText); lbl->setWordWrap(true); hlayout->addWidget(ico); hlayout->addWidget(lbl); QDialogButtonBox *bb = new QDialogButtonBox; bb->setWindowFlags(bb->windowFlags() & ~Qt::WindowContextHelpButtonHint); QPushButton *skip = bb->addButton(tr("Skip this version"), QDialogButtonBox::ResetRole); QPushButton *reject = bb->addButton(tr("Skip this time"), QDialogButtonBox::AcceptRole); QPushButton *getupdate = bb->addButton(tr("Get update"), QDialogButtonBox::AcceptRole); connect(skip, &QAbstractButton::clicked, msgBox, &QDialog::reject); connect(reject, &QAbstractButton::clicked, msgBox, &QDialog::reject); connect(getupdate, &QAbstractButton::clicked, msgBox, &QDialog::accept); connect(skip, &QAbstractButton::clicked, this, &NSISUpdater::slotSetSeenVersion); connect(getupdate, SIGNAL(clicked()), SLOT(slotOpenUpdateUrl())); layout->addWidget(bb); msgBox->open(); }
void UpdateDetector::showDialog() { // if the version tag is set, there is a newer version. QString ver = QString::fromLatin1("%1.%2.%3") .arg(MIRALL_VERSION_MAJOR).arg(MIRALL_VERSION_MINOR).arg(MIRALL_VERSION_MICRO); QDialog *msgBox = new QDialog; QIcon info = msgBox->style()->standardIcon(QStyle::SP_MessageBoxInformation, 0, 0); int iconSize = msgBox->style()->pixelMetric(QStyle::PM_MessageBoxIconSize, 0, 0); msgBox->setWindowIcon(info); QVBoxLayout *layout = new QVBoxLayout(msgBox); QHBoxLayout *hlayout = new QHBoxLayout; layout->addLayout(hlayout); msgBox->setWindowTitle(tr("New Version Available")); QLabel *ico = new QLabel; ico->setFixedSize(iconSize, iconSize); ico->setPixmap(info.pixmap(iconSize)); QLabel *lbl = new QLabel; QString txt = tr("<p>A new version of the %1 Client is available.</p>" "<p><b>%2</b> is available for download. The installed version is %3.<p>") .arg(Theme::instance()->appNameGUI()).arg(ocClient.versionstring()).arg(ver); lbl->setText(txt); lbl->setTextFormat(Qt::RichText); lbl->setWordWrap(true); hlayout->addWidget(ico); hlayout->addWidget(lbl); QDialogButtonBox *bb = new QDialogButtonBox; QPushButton *skip = bb->addButton(tr("Skip update"), QDialogButtonBox::ResetRole); QPushButton *reject = bb->addButton(tr("Skip this time"), QDialogButtonBox::AcceptRole); QPushButton *getupdate = bb->addButton(tr("Get update"), QDialogButtonBox::AcceptRole); connect(skip, SIGNAL(clicked()), msgBox, SLOT(reject())); connect(reject, SIGNAL(clicked()), msgBox, SLOT(reject())); connect(getupdate, SIGNAL(clicked()), msgBox, SLOT(accept())); connect(skip, SIGNAL(clicked()), SLOT(slotSetVersionSeen())); connect(getupdate, SIGNAL(clicked()), SLOT(slotOpenUpdateUrl())); layout->addWidget(bb); msgBox->open(); msgBox->resize(400, msgBox->sizeHint().height()); }
void CMainWindow::showAgreement(QString Agreement) { QDialog *AgreementDialog = new QDialog(this); replaceRTF(Agreement); Ui::AgreementDialog *UI = new Ui::AgreementDialog; UI->setupUi(AgreementDialog); UI->TextBrowser->setHtml(Agreement); connect(AgreementDialog, SIGNAL(accepted()), CNetworkClient::instance(), SLOT(acceptAgreement())); connect(AgreementDialog, SIGNAL(rejected()), CNetworkClient::instance(), SLOT(disconnect())); AgreementDialog->open(); }
void MainWindow::open() { if (QMessageBox::Yes == QMessageBox::question(this,tr("Question"),tr("Are you OK?"), \ QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) { QMessageBox::information(this, tr("Hmmm..."), tr("I'm glad to hear that!")); } else { QMessageBox::information(this, tr("Hmmm..."), tr("I'm sorry!")); } //dialog建立在栈上 /*//QDialog dialog(this); //QDialog dialog; dialog.setWindowTitle(tr("Hello, dialog!")); dialog.exec(); //QMessageBox::information(this, tr( "Information" ), tr("Open")); */ //dialog建立在堆上 QDialog *dialog = new QDialog; //dialog 使用 new 在堆上分配空间, 却一直没有 delete。可以调用可以调用 deleteLater() 函数,或者是设置 dialog 的 WindowAttribute来delete dialog。 dialog->setAttribute(Qt::WA_DeleteOnClose); // 或者 dialog->deleteLater(); dialog->setWindowTitle(tr("hello, dialog!")); //dialog->show(); dialog->open(); }