Qt C ++加载GUI然后加载其他设置

时间:2013-04-23 12:06:15

标签: c++ qt

我正在制作需要快速的大型应用程序。我有一个窗口加载,然后我将6个图像缩放到大约126x105大小,然后将它们设置为6个PushButtons上的图标。此过程大约需要2秒钟才能完成,并且在缩放这6张图片之前不会显示GUI。是否有任何方法来显示GUI,并在加载GUI后,然后缩放图像并将其设置为图标。 这是代码:

    f = new QFrame(this);
    f->setStyleSheet("background-color: rgba(240, 240, 240, 85%);"
                     "border: 2px solid green;"
                     "border-radius: 12px;");
    f->setGeometry(this->width/2-250, this->height/2-200, 500, 300);
    f->show();

    frameZatvori = new QPushButton(this);
    frameZatvori->setFlat(true);
    frameZatvori->setFont(QFont("Droid Sans", 9, QFont::Bold));
    frameZatvori->setGeometry(f->x()+475, f->y()+10, 15, 15);
    frameZatvori->setText("X");
    frameZatvori->setFocusPolicy(Qt::NoFocus);
    frameZatvori->show();

    promjenaP1 = new QPushButton(this);
    promjenaP1->setFlat(true);
    promjenaP1->setStyleSheet("border-color: solid blue;"
                              "border: 3px;"
                              "border-radius: 9px;");

    promjenaP1->setFocusPolicy(Qt::NoFocus);
    promjenaP1->setGeometry(f->x()+30, f->y()+30, 126, 105);
    promjenaP1->show();

    promjenaP2 = new QPushButton(this);
    promjenaP2->setFlat(true);
    promjenaP2->setFocusPolicy(Qt::NoFocus);
    promjenaP2->setGeometry(promjenaP1->x()+156, f->y()+30, 126, 105);
    promjenaP2->show();

    promjenaP3 = new QPushButton(this);
    promjenaP3->setFlat(true);
    promjenaP3->setFocusPolicy(Qt::NoFocus);
    promjenaP3->setGeometry(promjenaP2->x()+156, f->y()+30, 126, 105);
    promjenaP3->show();

    promjenaP4 = new QPushButton(this);
    promjenaP4->setFlat(true);
    promjenaP4->setFocusPolicy(Qt::NoFocus);
    promjenaP4->setGeometry(f->x()+30, promjenaP1->y()+135, 126, 105);
    promjenaP4->show();

    promjenaP5 = new QPushButton(this);
    promjenaP5->setFlat(true);
    promjenaP5->setFocusPolicy(Qt::NoFocus);
    promjenaP5->setGeometry(promjenaP1->x()+156, promjenaP1->y()+135, 126, 105);
    promjenaP5->show();

    promjenaP6 = new QPushButton(this);
    promjenaP6->setFlat(true);
    promjenaP6->setFocusPolicy(Qt::NoFocus);
    promjenaP6->setGeometry(promjenaP2->x()+156, promjenaP1->y()+135, 126, 105);
    promjenaP6->show();

    QObject::connect(frameZatvori, SIGNAL(clicked()), this, SLOT(zatvoriPozadineFunkcija()));

    QPixmap slika("/home/alen/QtSDK/writer/Pozadine/slika.jpg");
    QPixmap prebaci = slika.scaled(126, 105, Qt::IgnoreAspectRatio, Qt::FastTransformation);
    promjenaP1->setIcon(prebaci);
    promjenaP1->setIconSize(QSize(126, 105));
    QPixmap slika1("/home/alen/QtSDK/writer/Pozadine/slika1.jpg");
    QPixmap prebaci1 = slika1.scaled(126, 105, Qt::IgnoreAspectRatio, Qt::FastTransformation);
    promjenaP2->setIcon(prebaci1);
    promjenaP2->setIconSize(QSize(126, 105));
    QPixmap slika2("/home/alen/QtSDK/writer/Pozadine/slika2.jpg");
    QPixmap prebaci2 = slika2.scaled(126, 105, Qt::IgnoreAspectRatio, Qt::FastTransformation);
    promjenaP3->setIcon(prebaci2);
    promjenaP3->setIconSize(QSize(126, 105));
    QPixmap slika3("/home/alen/QtSDK/writer/Pozadine/slika3.jpg");
    QPixmap prebaci3 = slika3.scaled(126, 105, Qt::IgnoreAspectRatio, Qt::FastTransformation);
    promjenaP4->setIcon(prebaci3);
    promjenaP4->setIconSize(QSize(126, 105));
    QPixmap slika4("/home/alen/QtSDK/writer/Pozadine/slika4.jpg");
    QPixmap prebaci4 = slika4.scaled(126, 105, Qt::IgnoreAspectRatio, Qt::FastTransformation);
    promjenaP5->setIcon(prebaci4);
    promjenaP5->setIconSize(QSize(126, 105));
    QPixmap slika5("/home/alen/QtSDK/writer/Pozadine/slika5.jpg");
    QPixmap prebaci5 = slika5.scaled(126, 105, Qt::IgnoreAspectRatio, Qt::FastTransformation);
    promjenaP6->setIcon(prebaci5);
    promjenaP6->setIconSize(QSize(126, 105));

1 个答案:

答案 0 :(得分:0)

您的GUI未显示,因为此时未处理应用程序事件(我想您正在主线程中执行所有这些操作)。尝试推迟缩放pixmaps,例如,使用QTimer::singleShot()并在计时器回调中执行此操作。