短いコメントでごめんなさいハビエル。私が一線を画すつもりであるたびに、コメントが提出されました:-(
QtCreatorで作成したプロジェクトでこのコードを試しました。
class MyWidgetAction : public QWidgetAction
{
public:
MyWidgetAction( QObject * parent ) :QWidgetAction ( parent )
{
}
void releaseWidget ( QWidget * widget )
{
widget->deleteLater();
}
QWidget * requestWidget ( QWidget * parent )
{
QPushButton *b = new QPushButton( tr("MyWidget"), parent );
b->show();
return b;
}
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QAction *a = new QAction(tr("TestAction"),this); //1
QWidgetAction * wa = new QWidgetAction(this); //2
wa->setDefaultWidget(new QPushButton("Default"));
MyWidgetAction *mwa = new MyWidgetAction(this); //3
ui->menuBar->addAction( a ); //1 - works. TestAction added to menu bar
ui->menuBar->addAction( wa ); //2 - noop. nothing added to menu bar
ui->menuBar->addAction( mwa ); //3 - noop. nothing added to menu bar
}
QAction(1)の追加のみが機能しました。QWidgetActionをサブクラス化せずにデフォルトウィジェットでQWidgetActionを追加しても、結果は得られませんでした。C-TorとMyWidgetActionの両方の仮想関数にブレークポイントを設定しました。驚いたことに、C-Torのブレークポイントだけがヒットしました。オープンソースのMinGWバージョンのQt4.6.3を使用してWindowsを試しましたが、Qtのバグである可能性がありますか?よろしくお願いします!
よろしく、バレンティンハイニッツ