Qt4 を使用してプロジェクトを開発していますが、わずかな問題が発生しました。メインウィンドウからモーダルウィンドウを作成しています。上部のツールバーを無効にしたい。メニューからモーダルを生成するメニュー項目があります。私が欲しいのは、モーダルが生成されたときにメニューが無効になることです。setEnabled(false) 関数を使用してみましたが、リセットされません。
コードは次のとおりです。
void Main_Screen::Create_ViPro()
{
std::auto_ptr<ViPro_Dialog> modal(new ViPro_Dialog(this));
modal->show();
modal->exec();
}
したがって、メニュー項目が選択されたときにトリガーされる単純なクラスです。親をメイン画面に設定していることが問題の原因だと思いますが、親なしでモーダルを作成する方法がわかりません(それを行う意味がありません)。子から親のツールバーを無効にする方法はありますか? これまでに見た唯一のものは _fileMenu->setEnabled(false); です。モーダルを作成しない限り機能しますが、モーダルが生成されるとすぐに、メニューが再び機能します。私は完全に迷っています。前もって感謝します
パトリスとして編集
ここにコンストラクタがあります
Main_Screen::Main_Screen(QWidget* parent /*= NULL*/)
: QMainWindow(parent),
_newProj(new QAction(tr("New &ViPro"), this)),
_fileMenu(menuBar()->addMenu(tr("&File")))
{
//create slot for creating a new project
connect(_newProj.get(), SIGNAL(triggered()), this, SLOT(Create_ViPro()));
_fileMenu->addAction(_newProj.get());
//if i do this then setEnabled(false) works perfectly and i can't access the menu
Create_ViPro()
}
そのため、関数は newproject アクションをトリガーすることによって通知されます。コンストラクター内から関数を直接呼び出すと、パトリスが述べたように無効になりますが、トリガーを介して関数を呼び出すと、無効になりません。シグナル/スロットメカニズムの処理が間違っていますか? 再度、感謝します。
別の例として、以下のように関数 create_vipro() を作成した場合
void Main_Screen::Create_ViPro()
{
_fileMenu->setEnabled(false);
}
イベントをトリガーしてもファイル メニューは無効になっていないため、モーダル自体とは関係なく、シグナルの処理方法に関係している必要があります。