gpt4 book ai didi

c++ - 如何在 Qt 中编写自定义弹出窗口?

转载 作者:行者123 更新时间:2023-11-30 02:26:29 24 4
gpt4 key购买 nike

我的 Qt 应用程序由添加到 QStackedLayout() 上的几个屏幕组成。现在,经过一些用户操作后,我想要一个小弹出窗口来确认操作并在几秒钟后消失。我想要的是一个带有黑色边框和一些文本的灰色矩形。没有按钮,没有标题栏。

我试着用 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 中编写自定义弹出窗口?

最佳答案

首先,我想推荐Windows Flags Example Qt文档。它提供了一个很好的示例来解决这个主题。在此示例中,派生了一个 QWidget 以显示不同标志的效果。这让我想到,如果适当的 Qt::WindowFlags,可能任何 QWidget 都可以用于此目的。被设置。我选择 QLabel 因为

  • 可以显示文字
  • 它继承自QFrame,因此可以有一个框架。

源码testQPopup.cc:

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

我在 Windows 10(64 位)上使用 VS2013 和 Qt 5.6 编译。下图显示了快照:

Snapshot of testQPopup.exe

为了使弹出窗口更好地可见(并且因为我喜欢它),我更改了弹出窗口的 QLabel 的背景颜色。而且,我忍不住加了一点倒计时。

关于c++ - 如何在 Qt 中编写自定义弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42812028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com