hellovulkanwidget example: Add a widget showing debug output

Add a tab widget for vulkan info and debug log.

Change-Id: I0428bb5b6f847d0e94d62e846d34e4cb69eda5b6
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This commit is contained in:
Friedemann Kleint 2017-03-30 09:43:07 +02:00
parent 2cc1ff3bc2
commit 4fd5273f61
3 changed files with 34 additions and 9 deletions

View File

@ -52,18 +52,19 @@
#include <QVulkanFunctions> #include <QVulkanFunctions>
#include <QApplication> #include <QApplication>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QTextEdit> #include <QPlainTextEdit>
#include <QPushButton> #include <QPushButton>
#include <QLCDNumber> #include <QLCDNumber>
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QTabWidget>
MainWindow::MainWindow(VulkanWindow *w) MainWindow::MainWindow(VulkanWindow *w, QPlainTextEdit *logWidget)
: m_window(w) : m_window(w)
{ {
QWidget *wrapper = QWidget::createWindowContainer(w); QWidget *wrapper = QWidget::createWindowContainer(w);
m_info = new QTextEdit; m_info = new QPlainTextEdit;
m_info->setReadOnly(true); m_info->setReadOnly(true);
m_number = new QLCDNumber(3); m_number = new QLCDNumber(3);
@ -80,7 +81,10 @@ MainWindow::MainWindow(VulkanWindow *w)
connect(quitButton, &QPushButton::clicked, qApp, &QCoreApplication::quit); connect(quitButton, &QPushButton::clicked, qApp, &QCoreApplication::quit);
QVBoxLayout *layout = new QVBoxLayout; QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(m_info, 2); m_infoTab = new QTabWidget(this);
m_infoTab->addTab(m_info, tr("Vulkan Info"));
m_infoTab->addTab(logWidget, tr("Debug Log"));
layout->addWidget(m_infoTab, 2);
layout->addWidget(m_number, 1); layout->addWidget(m_number, 1);
layout->addWidget(wrapper, 5); layout->addWidget(wrapper, 5);
layout->addWidget(grabButton, 1); layout->addWidget(grabButton, 1);
@ -90,7 +94,7 @@ MainWindow::MainWindow(VulkanWindow *w)
void MainWindow::onVulkanInfoReceived(const QString &text) void MainWindow::onVulkanInfoReceived(const QString &text)
{ {
m_info->setText(text); m_info->setPlainText(text);
} }
void MainWindow::onFrameQueued(int colorValue) void MainWindow::onFrameQueued(int colorValue)

View File

@ -54,7 +54,8 @@
class VulkanWindow; class VulkanWindow;
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QTextEdit; class QTabWidget;
class QPlainTextEdit;
class QLCDNumber; class QLCDNumber;
QT_END_NAMESPACE QT_END_NAMESPACE
@ -63,7 +64,7 @@ class MainWindow : public QWidget
Q_OBJECT Q_OBJECT
public: public:
MainWindow(VulkanWindow *w); explicit MainWindow(VulkanWindow *w, QPlainTextEdit *logWidget);
public slots: public slots:
void onVulkanInfoReceived(const QString &text); void onVulkanInfoReceived(const QString &text);
@ -72,7 +73,8 @@ public slots:
private: private:
VulkanWindow *m_window; VulkanWindow *m_window;
QTextEdit *m_info; QTabWidget *m_infoTab;
QPlainTextEdit *m_info;
QLCDNumber *m_number; QLCDNumber *m_number;
}; };

View File

@ -49,16 +49,35 @@
****************************************************************************/ ****************************************************************************/
#include <QApplication> #include <QApplication>
#include <QPlainTextEdit>
#include <QVulkanInstance> #include <QVulkanInstance>
#include <QLibraryInfo>
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QPointer>
#include "hellovulkanwidget.h" #include "hellovulkanwidget.h"
Q_LOGGING_CATEGORY(lcVk, "qt.vulkan") Q_LOGGING_CATEGORY(lcVk, "qt.vulkan")
static QPointer<QPlainTextEdit> messageLogWidget;
static QtMessageHandler oldMessageHandler = nullptr;
static void messageHandler(QtMsgType msgType, const QMessageLogContext &logContext, const QString &text)
{
if (!messageLogWidget.isNull())
messageLogWidget->appendPlainText(text);
if (oldMessageHandler)
oldMessageHandler(msgType, logContext, text);
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QApplication app(argc, argv); QApplication app(argc, argv);
messageLogWidget = new QPlainTextEdit(QLatin1String(QLibraryInfo::build()) + QLatin1Char('\n'));
messageLogWidget->setReadOnly(true);
oldMessageHandler = qInstallMessageHandler(messageHandler);
QLoggingCategory::setFilterRules(QStringLiteral("qt.vulkan=true")); QLoggingCategory::setFilterRules(QStringLiteral("qt.vulkan=true"));
QVulkanInstance inst; QVulkanInstance inst;
@ -82,7 +101,7 @@ int main(int argc, char *argv[])
VulkanWindow *vulkanWindow = new VulkanWindow; VulkanWindow *vulkanWindow = new VulkanWindow;
vulkanWindow->setVulkanInstance(&inst); vulkanWindow->setVulkanInstance(&inst);
MainWindow mainWindow(vulkanWindow); MainWindow mainWindow(vulkanWindow, messageLogWidget.data());
QObject::connect(vulkanWindow, &VulkanWindow::vulkanInfoReceived, &mainWindow, &MainWindow::onVulkanInfoReceived); QObject::connect(vulkanWindow, &VulkanWindow::vulkanInfoReceived, &mainWindow, &MainWindow::onVulkanInfoReceived);
QObject::connect(vulkanWindow, &VulkanWindow::frameQueued, &mainWindow, &MainWindow::onFrameQueued); QObject::connect(vulkanWindow, &VulkanWindow::frameQueued, &mainWindow, &MainWindow::onFrameQueued);