2017-03-15 9 views
1

My Qtアプリケーションは、QStackedLayout()に追加された複数の画面で構成されています。今度はいくつかのユーザーアクションの後、私はアクションを確認し、数秒後に消えていくポップアップウィンドウがほしいと思います。私が望むのは、黒い枠線とそれにテキストが入った灰色の四角形です。ボタンなし、タイトルバーなし。Qtでカスタムポップアップウィンドウをプログラミングするにはどうすればよいですか?

私はQMessage Box(下のコードを参照)でそれをやろうとしましたが、一般的にQMessageBox()の境界線のスタイルを調整することはできません。サイズも調整できません。

QMessageBox* tempbox = new QMessageBox; 
tempbox->setWindowFlags(Qt::FramelessWindowHint); //removes titlebar 
tempbox->setStandardButtons(0); //removes button 
tempbox->setText("Some text"); 
tempbox->setFixedSize(800,300); //has no effect 
tempbox->show(); 
QTimer::singleShot(2000, tempbox, SLOT(close())); //closes box after 2 seconds 

Qtでカスタムポップアップウィンドウをプログラミングするにはどうすればよいですか?

+0

***サイズを調整することはできません。***私の現在のアプリケーションの1つでは、長いメッセージを表示するためにメッセージボックスの幅を設定しているので、これは間違いです。後で実装をチェックする必要があります。 – drescherjm

答えて

3

まず、QtドキュメントのWindows Flags Exampleをお勧めします。このトピックで遊ぶための素晴らしいサンプルを提供します。このサンプルでは、​​別のフラグの効果を示すためにQWidgetが導出されています。これにより、適切なQt::WindowFlagsが設定されている場合は、おそらく任意のQWidgetをこのために使用できるという考えが私にもたらされました。それがQFrameから継承し、従って、フレームを持つことができ、テキスト

  • を表示することができます

    • ので、私はQLabelを選びました。

    ソースコードtestQPopup.cc:Windowsの10(64ビット)上のVS2013とQt 5.6でコンパイルさ

    // standard C++ header: 
    #include <iostream> 
    #include <string> 
    
    // Qt header: 
    #include <QApplication> 
    #include <QLabel> 
    #include <QMainWindow> 
    #include <QTimer> 
    
    using namespace std; 
    
    int main(int argc, char **argv) 
    { 
        cout << QT_VERSION_STR << endl; 
        // main application 
    #undef qApp // undef macro qApp out of the way 
        QApplication qApp(argc, argv); 
        // setup GUI 
        QMainWindow qWin; 
        qWin.setFixedSize(640, 400); 
        qWin.show(); 
        // setup popup 
        QLabel qPopup(QString::fromLatin1("Some text"), 
        &qWin, 
        Qt::SplashScreen | Qt::WindowStaysOnTopHint); 
        QPalette qPalette = qPopup.palette(); 
        qPalette.setBrush(QPalette::Background, QColor(0xff, 0xe0, 0xc0)); 
        qPopup.setPalette(qPalette); 
        qPopup.setFrameStyle(QLabel::Raised | QLabel::Panel); 
        qPopup.setAlignment(Qt::AlignCenter); 
        qPopup.setFixedSize(320, 200); 
        qPopup.show(); 
        // setup timer 
        QTimer::singleShot(1000, 
        [&qPopup]() { 
        qPopup.setText(QString::fromLatin1("Closing in 3 s")); 
        }); 
        QTimer::singleShot(2000, 
        [&qPopup]() { 
        qPopup.setText(QString::fromLatin1("Closing in 2 s")); 
        }); 
        QTimer::singleShot(3000, 
        [&qPopup]() { 
        qPopup.setText(QString::fromLatin1("Closing in 1 s")); 
        }); 
        QTimer::singleShot(4000, &qPopup, &QLabel::hide); 
        // run application 
        return qApp.exec(); 
    } 
    

    I。下の画像はsnaphot示す:

    Snapshot of testQPopup.exe

    ポップアップが良く見えるようにする(私はそれを気に入っているので)、私がポップアップ用QLabelの背景色を変更しました。そして、私はカウントダウンを少し追加することに抵抗することができませんでした。

  • +0

    素敵な、それは動作します!ありがとうボス;) –

    関連する問題