PQBuilder [0.5.1] - скорректировать начальный код
PostPosted: 23 Mar 2016, 22:48
Main Window. Что мы имеем сейчас:
- Code:
class MainWindow extends QMainWindow { private $menuBar; private $centralWidget; public function __construct() { parent::__construct(); $this->initComponents(); $this->initMenus(); } private function initComponents() { $this->centralWidget = new QWidget; } private function initMenus() { $this->menuBar = new QMenuBar($this); /* File menu */ $fileMenu = $this->menuBar->addMenu( tr("File") ); $aboutAction = $fileMenu->addAction( 'icons/about.png', tr("About") ); $aboutAction->connect(SIGNAL('triggered(bool)'), $this, SLOT('onMenuAboutAction(bool)')); $fileMenu->addSeparator(); $quitAction = $fileMenu->addAction( 'icons/quit.png', tr("Quit") ); $quitAction->connect(SIGNAL('triggered(bool)'), $this, SLOT('onMenuQuitAction(bool)')); /* Edit menu */ $editMenu = $this->menuBar->addMenu( tr("Edit") ); $otherAction = $editMenu->addAction('Action without icon'); $this->setMenuBar($this->menuBar); } public function onMenuAboutAction($sender, $checked) { QMessageBox::about($this, tr("About"), tr("This is 'About' menu action.\r\nChange code in `onMenuOpenAction` function.")); QMessageBox::aboutQt($this); } public function onMenuQuitAction($sender, $checked) { qApp::quit(); } } $mainWindow = new MainWindow; $mainWindow->show(); qApp::exec();
- Code:
class MainWindow extends QMainWindow { //Эти два св-ва уже определены в QMainWindow и используются для установки менюбара и центрального виджета соответственно. Определяя их в дочернем классе мы усложняем себе жизнь. Причем, когда $centralWidget определен здесь, то в коде ниже мы его не устанавливаем в качестве центрального. //private $menuBar; //private $centralWidget; public function __construct() { parent::__construct(); $this->initComponents(); $this->initMenus(); } private function initComponents() { //Без переопределенного св-ва centralWidget, QWidget будет успешно присоединен $this->centralWidget = new QWidget; } private function initMenus() { //QMenuBar не нужно указывать родителя при создании иначе он будет создан и присоединен как обычный виджет, а не как менюбар $this->menuBar = new QMenuBar;//$this->menuBar = new QMenuBar($this); /* File menu */ $fileMenu = $this->menuBar->addMenu( tr("File") ); $aboutAction = $fileMenu->addAction( 'icons/about.png', tr("About") ); $aboutAction->connect(SIGNAL('triggered(bool)'), $this, SLOT('onMenuAboutAction(bool)')); $fileMenu->addSeparator(); $quitAction = $fileMenu->addAction( 'icons/quit.png', tr("Quit") ); $quitAction->connect(SIGNAL('triggered(bool)'), $this, SLOT('onMenuQuitAction(bool)')); /* Edit menu */ $editMenu = $this->menuBar->addMenu( tr("Edit") ); $otherAction = $editMenu->addAction('Action without icon'); ////Без переопределенного св-ва menuBar, присвоения ему нового экземпляра QMenuBar хватит для нормальной работы //$this->setMenuBar($this->menuBar); } public function onMenuAboutAction($sender, $checked) { QMessageBox::about($this, tr("About"), tr("This is 'About' menu action.\r\nChange code in `onMenuOpenAction` function.")); QMessageBox::aboutQt($this); } public function onMenuQuitAction($sender, $checked) { qApp::quit(); } } $mainWindow = new MainWindow; $mainWindow->show(); qApp::exec();