1

多数のQToolButtonを含むQWidgetを作成しましたが、正常に初期化して、を使用して別のウィンドウとして表示することができました。

myWidget.setVisible(true)

ただし、私の最終的な目標は、このウィジェットをQToolBarに追加して、QMainWindowのQt::LeftToolBarAreaに表示することです。myWidgetをQToolBarに追加します

myToolBar.addWidget(myWidget)

QToolBarがQMainWindowに正常に追加されました(QMainWindowのさまざまなツールバー領域を移動するために使用されるハンドルが表示され、移動できます)。ただし、QWidgetが表示されません。私は試した

myToolBar.addWidget(myWidget).setVisible(true)

setVisible()は、QActionで呼び出されない限り機能しないため、マニュアルで指定されているとおりです。QPushButtonなどの他の既成のウィジェットをQToolBarに追加しようとしましたが、これは正常に視覚化されています。

QToolBarでウィジェットを表示するために、ウィジェットに対して行う必要のある特別なことはありますか?

よろしく、

C

<<編集>>

だから、私が言ったように、私はqtDesignerを使用してmyWidgetを作成したので、それが作成したものを表示でき、うまくいけば長すぎません:

OnlineAssemblerPlayer.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>OnlineAssemblerPlayer</class>
 <widget class="QWidget" name="OnlineAssemblerPlayer">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>211</width>
    <height>30</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QWidget" name="horizontalLayoutWidget">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>211</width>
     <height>31</height>
    </rect>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
    <item>
     <widget class="QToolButton" name="toolButton_2">
      <property name="text">
       <string>...</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QToolButton" name="toolButton">
      <property name="text">
       <string>...</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QComboBox" name="comboBox"/>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

OnlineAssemblerPlayer.h

#ifndef ONLINEASSEMBLERPLAYER_H
#define ONLINEASSEMBLERPLAYER_H

#include <QWidget>

namespace Ui {
class OnlineAssemblerPlayer;
}

class OnlineAssemblerPlayer : public QWidget
{
    Q_OBJECT

public:
    explicit OnlineAssemblerPlayer(QWidget *parent = 0);
    ~OnlineAssemblerPlayer();

private:
    Ui::OnlineAssemblerPlayer *ui;
};

#endif // ONLINEASSEMBLERPLAYER_H

OnlineAssemblerPlayer.cc

#include "OnlineAssemblerPlayer.h"
#include "ui_OnlineAssemblerPlayer.h"

OnlineAssemblerPlayer::OnlineAssemblerPlayer(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::OnlineAssemblerPlayer)
{
    ui->setupUi(this);
}

OnlineAssemblerPlayer::~OnlineAssemblerPlayer()
{
    delete ui;
}

そして、Qtによって生成された* ui_OnlineAssemblerPlayer.h *

/********************************************************************************
** Form generated from reading UI file 'OnlineAssemblerPlayer.ui'
**
** Created: Wed Jul 4 16:23:39 2012
**      by: Qt User Interface Compiler version 4.8.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_ONLINEASSEMBLERPLAYER_H
#define UI_ONLINEASSEMBLERPLAYER_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QComboBox>
#include <QtGui/QHBoxLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QToolButton>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_OnlineAssemblerPlayer
{
public:
    QWidget *horizontalLayoutWidget;
    QHBoxLayout *horizontalLayout;
    QToolButton *toolButton_2;
    QToolButton *toolButton;
    QComboBox *comboBox;

    void setupUi(QWidget *OnlineAssemblerPlayer)
    {
        if (OnlineAssemblerPlayer->objectName().isEmpty())
            OnlineAssemblerPlayer->setObjectName(QString::fromUtf8("OnlineAssemblerPlayer"));
        OnlineAssemblerPlayer->resize(211, 30);
        horizontalLayoutWidget = new QWidget(OnlineAssemblerPlayer);
        horizontalLayoutWidget->setObjectName(QString::fromUtf8("horizontalLayoutWidget"));
        horizontalLayoutWidget->setGeometry(QRect(0, 0, 211, 31));
        horizontalLayout = new QHBoxLayout(horizontalLayoutWidget);
        horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
        horizontalLayout->setContentsMargins(0, 0, 0, 0);
        toolButton_2 = new QToolButton(horizontalLayoutWidget);
        toolButton_2->setObjectName(QString::fromUtf8("toolButton_2"));

        horizontalLayout->addWidget(toolButton_2);

        toolButton = new QToolButton(horizontalLayoutWidget);
        toolButton->setObjectName(QString::fromUtf8("toolButton"));

        horizontalLayout->addWidget(toolButton);

        comboBox = new QComboBox(horizontalLayoutWidget);
        comboBox->setObjectName(QString::fromUtf8("comboBox"));

        horizontalLayout->addWidget(comboBox);


        retranslateUi(OnlineAssemblerPlayer);

        QMetaObject::connectSlotsByName(OnlineAssemblerPlayer);
    } // setupUi

    void retranslateUi(QWidget *OnlineAssemblerPlayer)
    {
        OnlineAssemblerPlayer->setWindowTitle(QApplication::translate("OnlineAssemblerPlayer", "Form", 0, QApplication::UnicodeUTF8));
        toolButton_2->setText(QApplication::translate("OnlineAssemblerPlayer", "...", 0, QApplication::UnicodeUTF8));
        toolButton->setText(QApplication::translate("OnlineAssemblerPlayer", "...", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class OnlineAssemblerPlayer: public Ui_OnlineAssemblerPlayer {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_ONLINEASSEMBLERPLAYER_H

次に、QMainWindowのコンストラクターで次のように初期化します。

OnlineAssemblerPlayer *mOnlineAssemblerPlayer = new OnlineAssemblerPlayer;

QToolBar *mToolbarAssemblerPlayer = new QToolBar(tr("AssemblerPlayer"));

mToolbarAssemblerPlayer->addWidget(mOnlineAssemblerPlayer);
mToolbarAssemblerPlayer->setMovable(true);
mToolbarAssemblerPlayer->setAllowedAreas(Qt::AllToolBarAreas);
addToolBar(Qt::LeftToolBarArea, mToolbarAssemblerPlayer);
4

2 に答える 2

1

ツールバーの表示を設定する必要はありません。ウィジェットの外観に何かを追加してもよろしいですか?ウィジェットの外観を設定していないことはほぼ間違いありません。'myWidget'のコードと、ウィジェットをツールバーに追加することからの何かを見せていただけますか?

編集

追加してみてください

setLayout(ui->horizontalLayout);

直後の

retranslateUi(OnlineAssemblerPlayer);
于 2012-07-04T15:50:11.283 に答える
0

私は同様の問題に遭遇しました:カスタムウィジェット(QWidgetメンバーを持つサブクラス)を作成し、それを私ののQListViewに追加しようとしました。正常に親に戻されたにもかかわらず、私が何をしても表示されませんでした。単純なデフォルトのウィジェット(ボタン、テキスト編集、さらにはリストビュー)が表示され、うまく機能していましたが。QToolBarQMainWindowQToolBar

最終的には機能しませんでしたが、QToolBar実際には動作しないことQWidgetsQActionsわかりました。addWidget(wgt *)を使用してウィジェットを追加しても、wgtに接続されたQActionが追加されるだけです。

QButtonのようないくつかのデフォルトウィジェットで構成されるカスタムウィジェットを追加すると、QToolBarはそれを表示する方法を知らないのは当然のことのようです。私が理解しているようQWidgetActionに、カスタムウィジェット機能をなどに追加するために実装されQToolBarていることで解決されていQMenuます-すべてがを使用しますQActionsQWidgetActionの仮想機能createWidget(QWidget*)deleteWidget(QWidget*)その目標を果たします。

しかし、私の場合、私は問題を回避しました。それQWidgetを追加QListViewするのではなく、から直接継承しましたQListView。このようにして、それをツールバーに自由に追加できますaddWidget()

于 2017-09-04T19:31:39.237 に答える