如何与QMainWindow一起使用Qwinthumbnailtoolbar

how to use QWinThumbnailToolBar with QMainWindow

本文关键字:Qwinthumbnailtoolbar 一起 QMainWindow      更新时间:2023-10-16

我想尝试qt 5.2中的qwinthumbnailtoolbar,但它不起作用!(程序运行,但没有缩略图!!!)

//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QWinThumbnailToolButton>
#include <QWinThumbnailToolBar>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
    QWinThumbnailToolBar* thumbnailToolBar;
    QWinThumbnailToolButton *playToolButton;
    QWinThumbnailToolButton *forwardToolButton;
    QWinThumbnailToolButton *backwardToolButton;
};
#endif // MAINWINDOW_H

//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    thumbnailToolBar = new QWinThumbnailToolBar(this);
    thumbnailToolBar->setWindow(this->windowHandle());
    playToolButton = new QWinThumbnailToolButton(thumbnailToolBar);
    playToolButton->setEnabled(false);
    playToolButton->setToolTip(tr("true"));
    playToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
    forwardToolButton = new QWinThumbnailToolButton(thumbnailToolBar);
    forwardToolButton->setEnabled(true);
    forwardToolButton->setToolTip(tr("Fast forward"));
    forwardToolButton->setIcon(style()->standardIcon(QStyle::SP_TrashIcon));
    backwardToolButton = new QWinThumbnailToolButton(thumbnailToolBar);
    backwardToolButton->setEnabled(true);
    backwardToolButton->setToolTip(tr("Rewind"));
    backwardToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaSeekBackward));
    thumbnailToolBar->addButton(backwardToolButton);
    thumbnailToolBar->addButton(playToolButton);
    thumbnailToolBar->addButton(forwardToolButton);
}
MainWindow::~MainWindow()
{
    delete ui;
}
//pro file :
QT       += core gui winextras multimedia
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = untitled1
TEMPLATE = app

SOURCES += main.cpp
        mainwindow.cpp
HEADERS  += mainwindow.h
FORMS    += mainwindow.ui

我认为这两行的问题是:

 thumbnailToolBar = new QWinThumbnailToolBar(this);
 thumbnailToolBar->setWindow(this->windowHandle());

我还尝试使用Qwidget而不是QMainWindow ...我该如何修复?

您的代码以创建qwinthumbnailtoolbar是正确的,问题在于您创建它的地方。我认为在窗口构造函数中创建它是问题所在(也许是因为窗口句柄尚未准备就绪)。您可以做这样的事情:

//main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    FrmMain w;
    w.show();
    w.createThmbBar();
    return a.exec();
}

createThumbBar()是公共函数,在其中您创建qwinthumbnailtoolbar如:

//mainwindow.cpp

void MainWindow::createThmbBar()
{
    thumbnailToolBar = new QWinThumbnailToolBar(this);
    thumbnailToolBar->setWindow(this->windowHandle());
    playToolButton = new QWinThumbnailToolButton(thumbnailToolBar);
    playToolButton->setEnabled(false);
    playToolButton->setToolTip(tr("true"));
    playToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
    forwardToolButton = new QWinThumbnailToolButton(thumbnailToolBar);
    forwardToolButton->setEnabled(true);
    forwardToolButton->setToolTip(tr("Fast forward"));
    forwardToolButton->setIcon(style()->standardIcon(QStyle::SP_TrashIcon));
    backwardToolButton = new QWinThumbnailToolButton(thumbnailToolBar);
    backwardToolButton->setEnabled(true);
    backwardToolButton->setToolTip(tr("Rewind"));
    backwardToolButton->setIcon(style()->standardIcon(QStyle::SP_MediaSeekBackward));
    thumbnailToolBar->addButton(backwardToolButton);
    thumbnailToolBar->addButton(playToolButton);
    thumbnailToolBar->addButton(forwardToolButton);
}

较晚的答案,但希望它可以帮助任何人以后面对同一问题。

@ramez提出的工作的修复程序,但是由于Windows Extra,我正在应用程序关闭时崩溃。我需要在破坏者中做一些特别的事情吗?当QWinThumbnailToolBarPrivate::hasHandle()检查句柄时,Qwindow已被删除。

Exception thrown: read access violation.
d was 0xFFFFFFFFFFFFFF7F.
QPlatformWindow *QWindow::handle() const
{
    Q_D(const QWindow);
    return d->platformWindow;
}

堆栈跟踪下面:

    Qt5Guid.dll!QWindow::handle() Line 1929 C++
    Qt5WinExtrasd.dll!QWinThumbnailToolBarPrivate::hasHandle() Line 460 C++
    Qt5WinExtrasd.dll!QWinThumbnailToolBarPrivate::handle() Line 465    C++
    Qt5WinExtrasd.dll!QWinThumbnailToolBarPrivate::nativeEventFilter(const QByteArray & __formal, void * message, long * result) Line 549   C++
    Qt5Cored.dll!QAbstractEventDispatcher::filterNativeEvent(const QByteArray & eventType, void * message, long * result) Line 484  C++
    [External Code] 
    Qt5Guid.dll!QWindowPrivate::destroy() Line 1914 C++
    Qt5Guid.dll!QWindow::destroy() Line 1864    C++
    Qt5Widgetsd.dll!QWidgetPrivate::deleteTLSysExtra() Line 1891    C++
    Qt5Widgetsd.dll!QWidget::destroy(bool destroyWindow, bool destroySubWindows) Line 12515 C++
    Qt5Widgetsd.dll!QApplication::~QApplication() Line 798  C++
相关文章:
  • 没有找到相关文章